如何在JSF-Page中使用validateRegex验证数字字段?

时间:2012-02-29 15:25:14

标签: regex validation jsf

在托管bean中,我有一个int类型的属性。

@ManagedBean
@SessionScoped
public class Nacharbeit implements Serializable {

private int number;

在JSF页面中,我尝试仅为6位数字输入验证此属性

               <h:inputText id="number"
                         label="Auftragsnummer"
                         value="#{myController.nacharbeit.number}"
                         required="true">
                <f:validateRegex pattern="(^[1-9]{6}$)" />
            </h:inputText>

在运行时我得到一个例外:

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

正则表达式错了吗?或者只是字符串的ValidateRegex?

2 个答案:

答案 0 :(得分:24)

<f:validateRegex>仅用于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>

顺便说一句,您可以通过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>

答案 1 :(得分:0)

您也可以不用正则表达式来实现

要验证int值:

<h:form id="user-form">  
    <h:outputLabel for="name">Provide Amount to Withdraw  </h:outputLabel><br/>  
    <h:inputText id="age" value="#{user.amount}" validatorMessage="You can Withdraw only between $100 and $5000">  
    <f:validateLongRange minimum="100" maximum="5000" />  
    </h:inputText><br/>  
    <h:commandButton value="OK" action="response.xhtml"></h:commandButton>  
</h:form> 

要验证浮点值:

<h:form id="user-form">  
    <h:outputLabel for="amount">Enter Amount </h:outputLabel>  
    <h:inputText id="name-id" value="#{user.amount}" validatorMessage="Please enter amount between 1000.50 and 5000.99">  
    <f:validateDoubleRange minimum="1000.50" maximum="5000.99"/>  
    </h:inputText><br/><br/>  
    <h:commandButton value="Submit" action="response.xhtml"></h:commandButton>
</h:form>