JSF中具有最小长度验证的可选字段

Rea*_*bil 1 validation ajax jsf facelets

我有一个带有可选字段的注册表单,但如果输入任何值,则应该超过2个字符.如果用户将该字段留空,如何跳过验证?

 <h:inputText id ="fooid" maxlength="50" tabindex="4" value="#{registrationBean.foo}"  validatorMessage="Please enter two or more characters">
 <f:validateRegex pattern="^[A-Za-z-_./\s]{2,50}$"/>
 <f:ajax event="blur" render="fooPanel" />
 </h:inputText>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Bal*_*usC 6

如果添加以下上下文参数,它的工作原理如下:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

这将告诉JSF将空字符串提交的值解释为null.如果值为null,则仅required="true"触发验证器而不触发其他验证器.另外一个优点是,当最终用户没有填写输入时,它可以使您的模型没有杂乱的空字符串.

如果由于某种原因这不是一个选项,例如当你的模型错误地依赖空字符串时,那么你最好的选择是检查正则表达式是否为空字符串:

 <f:validateRegex pattern="^$|^[A-Za-z-_./\s]{2,50}$" />
Run Code Online (Sandbox Code Playgroud)