JSF/PrimeFaces—如何为自定义验证器显示消息,而不是为同一组件上所需的验证显示消息

JSF/PrimeFaces—如何为自定义验证器显示消息,而不是为同一组件上所需的验证显示消息,jsf,primefaces,jsf-2,jsf-2.2,mojarra,Jsf,Primefaces,Jsf 2,Jsf 2.2,Mojarra,我有一个使用PrimeFaces的JSF2实现。我正在使用组件。当用户在无线电组件中选择“否”时,我想显示一条自定义消息。为此,我创建了一个自定义验证器,与消息组件一起,一切正常。但是,该组件也是必需的。我不希望在消息组件中显示所需组件的“Value is required”验证错误。在这种情况下,我只希望突出显示字段和标签 因此,问题是:如何指定给定的组件只显示来自自定义验证器的错误,而不显示来自所需验证器的错误 我在几年前看到了一个类似问题的答案,该问题表示可以将的message属性设置为实

我有一个使用PrimeFaces的JSF2实现。我正在使用
组件。当用户在无线电组件中选择“否”时,我想显示一条自定义消息。为此,我创建了一个自定义验证器,与消息组件一起,一切正常。但是,该组件也是必需的。我不希望在消息组件中显示所需组件的“Value is required”验证错误。在这种情况下,我只希望突出显示字段和标签

因此,问题是:如何指定给定的
组件只显示来自自定义验证器的错误,而不显示来自所需验证器的错误

我在几年前看到了一个类似问题的答案,该问题表示可以将的message
属性设置为实际上不存在的组件,然后通过FacesContext将消息添加到该组件中。例如:
FacesContext.getCurrentInstance().addMessage(“fooMsg”,msg)

然而,这似乎不起作用。JSF抛出一个错误,它找不到组件“fooMsg”

这是我目前的代码

组成部分:



验证器:

@FacesValidator(“foodalidator”)
公共类FooValidator实现验证器{
@凌驾
公共void验证(FacesContext上下文、UIComponent组件、对象值)引发Validator异常{
if(值!=null){
字符串sValue=(字符串)值;
if(sValue.trim().equalsIgnoreCase(“否”)){
FacesMessage msg=新的FacesMessage(“摘要”,
“细节”);
消息设置严重性(FacesMessage.SEVERITY_错误);
抛出新的验证异常(msg);
}
}
}
}

首先,这是默认的JSF行为。解决你的问题 问题是,您可以使用jQuery检查是否没有选择单选按钮,并将消息隐藏在其中 例如:

<h:form id="form">
    <p:outputLabel for="foo" id="foolbl" value="Some label text." />
    <br />
    <p:message id="foomsg" for="foo" />
    <p:selectOneRadio id="foo" layout="pageDirection" widgetVar="fooVar"
        required="true">
        <f:selectItem itemLabel="Yes" itemValue="Yes" />
        <f:selectItem itemLabel="No" itemValue="No" />
        <p:ajax process="@this" update="@this foolbl foomsg" />
        <f:validator validatorId="FooValidator" />
    </p:selectOneRadio>

    <p:commandButton process="@this foo" update="foo foolbl foomsg"
        oncomplete="if( !PF('fooVar').checkedRadio.length ) $('#form\\:foomsg').hide();" />
</h:form>


查看commandButton的oncomplete属性