Twi*_*ton 9 regex validation jsf
在托管bean中,我有一个int类型的属性.
@ManagedBean
@SessionScoped
public class Nacharbeit implements Serializable {
private int number;
Run Code Online (Sandbox Code Playgroud)
在JSF页面中,我尝试仅为6位数字输入验证此属性
<h:inputText id="number"
label="Auftragsnummer"
value="#{myController.nacharbeit.number}"
required="true">
<f:validateRegex pattern="(^[1-9]{6}$)" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
在运行时我得到一个例外:
javax.servlet.ServletException: java.lang.Integer cannot be cast to java.lang.String
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)
正则表达式错了吗?或者只是字符串的ValidateRegex?
Bal*_*usC 24
该<f:validateRegex>
被intented要在使用String
仅属性.但是你有一个int
属性,JSF已经将提交的String
值转换为Integer
验证之前的属性.这解释了您所看到的例外情况.
但是,由于您已经在使用某个int
属性,因此输入非数字时就会出现转换错误.转换错误消息是按converterMessage
属性配置的方式.所以你根本不需要使用正则表达式.
至于具体的功能要求,您似乎想验证最小/最大长度.为此你应该使用<f:validateLength>
.将此与maxlength
属性结合使用,以便最终用户无论如何都不能输入超过6个字符.
<h:inputText value="#{bean.number}" maxlength="6">
<f:validateLength minimum="6" maximum="6" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
您可以validatorMessage
顺便配置验证错误消息.所以,所有这一切都看起来像这样:
<h:inputText value="#{bean.number}" maxlength="6"
converterMessage="Please enter digits only."
validatorMessage="Please enter 6 digits.">
<f:validateLength minimum="6" maximum="6" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27019 次 |
最近记录: |