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

Ajax JSF中具有最小长度验证的可选字段,ajax,validation,jsf,facelets,Ajax,Validation,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,

我有一个带有可选字段的注册表,但如果您输入任何值,它应该超过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>


任何帮助都将不胜感激。

如果您添加以下上下文参数,它将按预期工作:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

如果添加以下上下文参数,它将按预期工作:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

不熟悉JSF,但您能在模式中编写“或”操作符吗?然后模式将变成
“(^$| ^A-Za-z-./\s]{2,50}$)”
,用于“空字符串或2个或更多字母”,您使用的是哪个JSF impl/版本?这个结构对我来说很好。如果字段为空,则不会调用validate regex。顺便说一句,您忘记了字段中的
maxlength=“50”
。@balusc我使用的是jsf-impl-2.0.3-b05.jar.Wow,这很古老(3岁)。目前已有30多个更新版本。最新版本是2.1.25(现在还不要抓取2.2.x)。在这里获取:然后重试。顺便说一句,如果您看到100个其他(次要)问题和烦恼通过这个主要的升级步骤立即得到解决,请不要感到惊讶。谢谢@BalusC,我用新的2.1.25 impl javax.faces-2.1.25.jar进行了测试。还是一样的问题。我觉得这与正则表达式模式有关。不熟悉JSF,但你能在模式中编写“或”操作符吗?然后模式将变成
“(^$| ^A-Za-z-./\s]{2,50}$)”
,用于“空字符串或2个或更多字母”,您使用的是哪个JSF impl/版本?这个结构对我来说很好。如果字段为空,则不会调用validate regex。顺便说一句,您忘记了字段中的
maxlength=“50”
。@balusc我使用的是jsf-impl-2.0.3-b05.jar.Wow,这很古老(3岁)。目前已有30多个更新版本。最新版本是2.1.25(现在还不要抓取2.2.x)。在这里获取:然后重试。顺便说一句,如果您看到100个其他(次要)问题和烦恼通过这个主要的升级步骤立即得到解决,请不要感到惊讶。谢谢@BalusC,我用新的2.1.25 impl javax.faces-2.1.25.jar进行了测试。还是一样的问题。我觉得这与正则表达式模式有关。许多年后,这对我有所帮助。奇怪的是,使用f:validateLongRange并不是数字的默认行为。多年后,这对我有所帮助。奇怪的是,这不是使用f:validateLongRange的数字的默认行为。