ajax - 当 ajax 请求验证失败时,如何使用 Primefaces 突出显示 UIInput?

标签 ajax jsf-2 primefaces

验证器类:

@FacesValidator("br.gov.valec.sicpd.util.CpfValidator")
public class CpfValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value)
        throws ValidatorException {
        if (validateCpf(value.toString())) {
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Input","Invalid Input");
            ((UIInput) component).setValid(false); // this line doesnt work

        throw new ValidatorException(msg);
    }
}

JSF 片段:
<p:inputText label="CPF" id="inputCpf"
                    value="#{mainBean.owner.cpf}">
                    <f:validator validatorId="br.gov.valec.sicpd.util.CpfValidator" />
                    <p:ajax event="change" update="inputNameOwner"
                        listener="#{mainBean.searchOwner}"  />
</p:inputText>

当通过命令按钮提交表单时,primefaces 会自动突出显示它。当 ajax 被触发并且验证失败时,我该如何实现?

最佳答案

UIInput#setValid(false)工作正常。您只是忘记告诉 ajax 更新输入组件本身。添加 inputCpf@this<p:ajax update> .

<p:ajax ... update="@this inputNameOwner" />

那个露骨的UIInput#setValid(false)顺便说一下,调用验证器是不必要的。摆脱它。一旦 JSF 捕获到 ValidatorException,它就已经自己完成了所有工作。由您的验证器抛出。

关于ajax - 当 ajax 请求验证失败时,如何使用 Primefaces 突出显示 UIInput?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474140/

相关文章:

javascript - 点击发送数据

javascript - 如何克服本地机器中的 http 请求状态为零

javascript - 如何正确地将数据从 jQuery 和 Ajax 附加到 HTML?

java - JSF2.0 @EJB 注入(inject) @ViewScoped 导致 MyFaces 变为 CFNE

java - 获取值时出现问题,JSF-数据表

jsf - 如何在 RichFaces 4 中上传文件?

jsf - 如何引用p :commandLink in p:dataTable from p:blockUI trigger?

css - PrimeFaces 菜单栏, float :right 上的最后一个菜单项

javascript - Ajax 就绪状态 : 0 always in javascript

java - 使用 spring security 创建自定义登录