【发布时间】:2018-11-05 17:32:50
【问题描述】:
我在使用 PrimeFaces 时遇到了一个奇怪的问题。我写了一个注册表单,其中所有字段都是必填的。几乎每个字段都有一个自定义的国际化转换器或验证器消息。
有两种错误情况(使用和不使用 AJAX):
- 不使用 AJAX:按下命令按钮后,所有验证器消息都会正确显示。问题是验证失败后,输入字段的字体颜色变为白色。选择时只能看到输入的文字。
- 使用 AJAX:按下命令按钮后,所有验证器消息都会正确显示,并且字段的字体颜色不会改变。输入字段是可聚焦的。除了没有调用动作侦听器方法之外,一切都运行良好。
不会抛出任何异常。没有错误消息或类似的东西。我什至尝试更改 PrimeFaces 版本(我目前使用的是 6.1)并使用没有任何样式的表单、其中的 div 容器和周围的 HTML 标记。起初我以为某些 CSS div 在验证后与表单重叠,但事实并非如此。
我的代码:
<h:form id="form">
<p:panelGrid columns="1" styleClass="ui-noborder">
<!-- MESSAGES -->
<p:messages id="msgs" closable="true"/>
<!-- E-MAIL -->
<h:outputLabel for="email" value="#{msgs.email_label} *"/>
<p:inputText id="email" name="email" required="true"
requiredMessage="#{msgs.email_format_message}" value="#{regCon.email}"
validatorMessage="#{msgs.email_format_message}">
<f:validateRegex
pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/>
</p:inputText>
<!-- USERNAME -->
<h:outputLabel for="username" value="#{msgs.username_label} *"/>
<p:inputText id="username" name="username" required="true"
requiredMessage="#{msgs.username_format_message}" value="#{regCon.username}"
validatorMessage="#{msgs.username_format_message}">
<f:validateRegex pattern="[a-zA-Z][a-zA-Z0-9]{3,15}"/>
</p:inputText>
<!-- PASSWORD -->
<h:outputLabel for="password" value="#{msgs.password_label} *"/>
<p:password id="password" name="password" required="true"
requiredMessage="#{msgs.password_format_message}" match="password_rep"
value="#{regCon.password}" validatorMessage="#{msgs.password_format_message}">
<f:validateRegex
pattern="((?=.*[a-z])(?=.*d)(?=.*[A-Z]).{8,40})"/>
</p:password>
<!-- REPEAT PASSWORD -->
<h:outputLabel for="password_rep" value="#{msgs.password_repeat_label} *"/>
<p:password id="password_rep" name="password_rep" required="true" value="#{regCon.passwordRepeat}"
requiredMessage="#{msgs.password_repeat_required_message}"/>
<!-- FIRSTNAME -->
<h:outputLabel for="firstname" value="#{msgs.firstname_label} *"/>
<p:inputText id="firstname" name="firstname" required="true"
requiredMessage="#{msgs.firstname_required_message}" value="#{regCon.firstname}">
</p:inputText>
<!-- LASTNAME -->
<h:outputLabel for="lastname" value="#{msgs.lastname_label} *"/>
<p:inputText id="lastname" name="lastname" required="true"
requiredMessage="#{msgs.lastname_required_message}" value="#{regCon.lastname}">
</p:inputText>
<!-- PHONE -->
<h:outputLabel for="phone" value="#{msgs.phonenumber_label} *"/>
<p:inputText id="phone" name="phone" required="true"
requiredMessage="#{msgs.phone_format_message}" value="#{regCon.phoneNumber}"
validatorMessage="#{msgs.phone_format_message}">
<f:validateRegex
pattern="\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$"/>
</p:inputText>
<!-- BIRTHDAY -->
<h:outputLabel for="birthday" value="#{msgs.birthday_label} *"/>
<p:inputMask id="birthday" name="birthday" required="true"
requiredMessage="#{msgs.birthday_format_message}"
value="#{regCon.dateOfBirth}" mask="#{msgs.birthday_mask}"
converterMessage="#{msgs.birthday_format_message}">
<f:convertDateTime pattern="#{msgs.birthday_pattern}"/>
</p:inputMask>
<p:commandButton value="#{msgs.registration_button}" styleClass="ui-priority-primary" ajax="false"
update=":form:msgs"
process=":form:email :form:username :form:password password_rep :form:firstname :form:lastname :form:phone :form:birthday"
actionListener="#{regCon.register()}"/>
<p:commandButton type="reset" value="#{msgs.reset_button}" update=":form:msgs"
process=":form:email :form:username :form:password :form:password_rep firstname :form:lastname :form:phone :form:birthday"/>
</p:panelGrid>
</h:form>
【问题讨论】:
标签: java validation jsf primefaces