我将混合客户端验证 (CSV) 与 JSR-303 bean 验证约束和 ajax-fallback 验证用于 h:inputText 标记。
但是,如果 CSV 通过并且 ajax 回退验证失败,则会导致验证消息闪烁。我认为这是因为首先客户端删除了消息,后来的 ajax 调用再次添加了消息。如果验证是由触发的,这尤其令人讨厌<rich:validator event="keyup" />.
如果只实现一种类型的验证,那么消息会很好地显示而不会闪烁。
我猜这是一个ajax排队问题,但<a4j:queue ignoreDupResponses="true"/>
没有解决问题。
有任何想法吗?谢谢。
详细地:
对于客户端验证,我添加了注释
@Pattern(regexp = "^[\\w\\-]([\\.\\w])+[\\w]+@([\\w\\-]+\\.)+[a-zA-Z]{2,4}$", message = "Bad email")
private String email;
在验证 bean 中。
对于 ajax 后备(服务器端)部分,我添加了 bean 方法
public void validateEmail(FacesContext context, UIComponent toValidate, Object value) {
... // Check if email is already taken
}
标签看起来像
<h:inputText id="registerFullname" value="#{registerPanelBean.email}" validator="#{registerPanelBean.validateEmail}">
<rich:validator event="keyup" />
</h:inputText>
<rich:message for="registerFullname">
</rich:message>