如何使用ajax事件和渲染消息通过@FacesValidator执行单个输入验证?

时间:2019-03-10 08:43:28

标签: ajax jsf

用法:JSF 2.3.2 Mojarra

在将ajax添加到我的jsf时遇到了这种情况:

在刷新表单时无法刷新: h:message id =“ phoneNumber-msg”

<h:messages id="validation-messages" styleClass="validation-messages"/>
<h:form>
    <h:outputLabel for="phoneNumber">Phone number</h:outputLabel>
    <h:inputText id="phoneNumber" value="#{bean.phoneNumber}">
        <f:validator validatorId="validators.PhoneNumber"/>
        <f:ajax event="blur" execute="@this" render="phoneNumber-msg"/>
    </h:inputText>
    <h:message id="phoneNumber-msg" for="phoneNumber"/>
    [...]
    <h:commandButton value="Submit" action="#{userDetails.submit}"/>
</h:form>

validators.PhoneNumber 是@FacesValidator:

@FacesValidator("validators.PhoneNumber")
public class PhoneNumberValidator implements javax.faces.validator.Validator {
    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { ... }
}

添加

验证工作正常(来自 validators.PhoneNumber 的消息同时出现在: id =“ validation-messages” id =“ phoneNumber-msg” < / em>),然后通过结束表单的“提交”按钮刷新:

   <h:commandButton value="Submit" action="#{userDetails.submit}"/>
</h:form>

如果您考虑不同的验证方式->在EmailAddress输入处,我使用了自己的类注释( EmailAddressValidator实现了ConstraintValidator ),该注释通过@ValidEmailAddress在表单中使用的bean上进行了验证-它呈现了电子邮件验证消息正确,但是在这里我想用另一种方式验证PhoneNumber。


是否可以呈现 id =“ phoneNumber-msg” (这意味着在填写表格时继续执行 validators.PhoneNumber

0 个答案:

没有答案