【发布时间】:2013-08-28 10:14:41
【问题描述】:
我有一个带有可选字段的注册表单,但如果您输入任何值,它应该超过 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>
任何帮助将不胜感激。
【问题讨论】:
-
不熟悉JSF,但是你能用模式写“或”运算符吗?然后模式将变为
"(^$|^A-Za-z-_./\s]{2,50}$)"表示“空字符串,或者 2 个或更多字母” -
您使用的是哪个 JSF impl/version?这个结构对我来说很好。如果字段为空,则不会调用验证正则表达式。顺便说一句,你忘记了
maxlength="50"在场上。 -
@balusc 我正在使用 jsf-impl-2.0.3-b05.jar。
-
哇,那是古老的(3 岁)。目前已经有 30 多个新版本。最新的是 2.1.25(暂时不要抢 2.2.x)。去这里获取它:javaserverfaces.java.net 并重试。顺便说一句,如果您发现 100 个其他(次要)问题和烦恼通过这一重大升级步骤立即得到解决,请不要感到惊讶。
-
感谢@BalusC,我使用新的 2.1.25 impl javax.faces-2.1.25.jar 进行了测试。还是同样的问题。我觉得这与正则表达式模式有关。
标签: ajax validation jsf facelets