TextField 文本框
基本用法
示例:
<textField id="nameField"
caption="Name"/>
如需创建关联至数据的 TextField,可以用 XML 的 dataContainer 和 property 属性:
<data>
<instance id="customerDc" class="ui.ex1.entity.Customer">
<loader/>
</instance>
</data>
<layout>
<vbox margin="true" spacing="true">
<textField dataContainer="customerDc"
property="firstName"
caption="Name"/>
</layout>
如上所示,界面描述中为具有 firstName 属性的 Customer 定义了数据容器 customerDc。TextField 通过 dataContainer 属性连接到数据容器,property 属性设置为要显示在 TextField 中的实体属性的名称。
属性
datatype
如果文本框没有连接到任何实体属性(即,未设置数据容器和属性名称),可以使用 datatype 属性设置数据类型。数据类型用来格式化控件值。datatype 属性值可以是应用程序元数据中注册的任何 数据类型。
通常,TextField 使用下面的数据类型:
-
decimal -
double -
int -
long
<textField id="integerField"
datatype="int"
caption="Integer field"/>
maxLength
如果 TextField 连接到实体属性(通过 dataContainer 和 property),并且实体属性具有定义在 @Column JPA 注解中的 length 参数,那么 TextField 将相应地限制输入文本的最大长度。
如果 TextField 未链接到属性,或者属性未定义 length 值,或者需要覆盖此值,则可以使用 maxLength 属性限制输入文本的最大长度。值 "-1" 表示没有限制。示例:
<textField id="shortTextField"
maxLength="10"/>
trim
默认情况下,TextField 会截去字符串的前后空格。例如,用户输入 " aaa bbb ",则 getValue() 方法返回并保存到连接实体属性的控件值将为 "aaa bbb"。可以将 trim 属性设置为 false 来禁用此功能。
请注意,去除空格仅在用户输入新值时起作用。如果连接属性的值中已包含空格,则将显示空格,直到用户编辑该值。
<textField id="trimField"
caption="Trimmed field"
trim="false"/>
TextField 始终返回 null 而不是输入的空字符串。因此,启用 trim 属性后,任何只包含空格的字符串都将转换为 null。
转换
大小写转换
TextField 支持自动大小写转换。caseConversion 属性包含下列取值:
-
UPPER- 转换为大写。 -
LOWER- 转换为小写。 -
NONE- 不转换(默认值)。用这个选项来支持在输入法连续输入(比如,在输入中文、日文、韩文的时候)。
数据类型转换
如果用户输入了一个无法通过 数据类型 解析的值,则会显示默认的转换错误消息。
下面是一个数据类型是 Integer 的 TextField:
<textField id="integerField"
datatype="int"
caption="Integer field"/>
如果用户输入的字符不能解析为整数,应用程序将显示默认的错误消息。
默认的错误消息可以按照 错误消息转换 章节介绍的方法在项目中进行全局定义。
可以在界面 XML 描述中声明式的定义自己的类型转换错误消息,使用 conversionErrorMessage 属性,示例:
<textField id="textField"
conversionErrorMessage="This field can work only with Integers"
datatype="int"
caption="Integer field"/>
或者在界面控制器中通过编程的方式创建:
@Autowired
private TextField<Integer> textField;
@Subscribe
protected void onInit(InitEvent initEvent) {
textField.setConversionErrorMessage("This field can work only with Integers");
}
验证
如需验证 TextField 组件的值,可以在内部的 validators 元素使用 validator。
TextField 可以使用下列预定义的 validators:
下面例子中,我们演示 textValidField 如何使用 NegativeValidator:
<textField id="textValidField"
datatype="int">
<validators>
<negative/>
</validators>
</textField>
样式
可以在界面 XML 或者控制器中使用 stylename 属性为 TextField 组件设置预定义样式:
<textField stylename="borderless"
caption="Borderless field"/>
@Autowired
private TextField<String> styledField;
@Subscribe
protected void onInit(InitEvent initEvent) {
styledField.setStyleName("align-center");
}
-
align-center- 使文本在文本框中居中显示。 -
align-right- 使文本在文本框中居右显示。 -
borderless- 删除文本框的边框和背景。 -
inline-icon- 使图标显示在文本框里面。
事件和处理器
|
如需使用 Jmix Studio 生成处理器的桩代码,需要在界面 XML 描述或者 Jmix UI 层级结构面板选中该组件,然后用 Jmix UI 组件面板的 Handlers 标签页生成。 或者可以使用界面控制器顶部面板的 Generate Handler 按钮。 |
EnterPressEvent
参阅 EnterPressEvent。
格式化器
为组件添加 formatter 实例。
下面示例中,我们演示为 customerField 文本框使用 formatter:
@Install(to = "customerField", subject = "formatter")
protected String customerFieldFormatter(String value) {
return value.toUpperCase();
}
如需以编程的方式添加 formatter,使用组件的 addFormatter() 方法。
TextChangeEvent
TextChangeEvent 当用户在组件内输入一些内容时发送。事件会在输入时异步发送,防止阻塞用户输入。
@Autowired
private Label<String> shortTextLabel;
@Autowired
private TextField<String> shortTextField;
@Subscribe("shortTextField")
public void onShortTextFieldTextChange(TextInputField.TextChangeEvent event) {
int length = event.getText().length();
shortTextLabel.setValue(length + " of " + shortTextField.getMaxLength());
}
如需以编程的方式注册事件处理器,使用组件的 addTextChangeListener() 方法。
TextChangeEventMode 定义文本的变化被发送到服务器并触发服务端事件的方式。有 3 种预定义的事件模式:
-
LAZY(默认)- 文件输入暂停时触发事件。暂停时间可以通过setInputEventTimeout()修改。 -
TIMEOUT- 一定时间超时后触发事件。可以使用setInputEventTimeout()设置超时时长。 -
EAGER- 对于文本内容的每次更改,都会立即触发事件,通常是由按键触发。 -
BLUR- 文本控件失去焦点时,发送事件。
textChangeTimeout 属性可以修改当 TextChangeEventMode 是 LAZY 或 TIMEOUT 时,事件与应用程序沟通的频率。
编程式用法,调用组件的 setTextChangeEventMode() 方法。
@Autowired
private TextField<String> shortTextField;
@Subscribe
protected void onInit(InitEvent initEvent) {
shortTextField.setTextChangeEventMode(TextInputField.TextChangeEventMode.LAZY);
}
Validator
为组件添加 validator 实例。如果值验证失败,validator 必须抛出 ValidationException 异常。
如果 预定义 的验证器不能满足要求,可以添加自定义的验证器实例:
@Install(to = "zipField", subject = "validator")
protected void zipFieldValidator(Integer value) {
if (value != null && String.valueOf(value).length() != 6)
throw new ValidationException("Zip must be of 6 digits length");
}
ValueChangeEvent
参阅 ValueChangeEvent。
TextField XML 属性
|
可以使用 Studio 界面设计器的 Jmix UI 组件面板查看和编辑组件的属性。 |
align - buffered - caseConversion - caption - captionAsHtml - colspan - contextHelpText - contextHelpTextHtmlEnabled - conversionErrorMessage - css - dataContainer - dataType - description - descriptionAsHtml - editable - enable - box.expandRatio - height - htmlSanitizerEnabled - htmlName - icon - id - inputPrompt - maxLength - property - required - requiredMessage - responsive - rowspan - stylename - tabIndex - textChangeEventMode - textChangeTimeout - trim - visible - width