Jsf Primefaces选择列表';必需的';验证失败

Jsf Primefaces选择列表';必需的';验证失败,jsf,primefaces,Jsf,Primefaces,我有一个选择列表,它要求每次使用required时都提供一个值,并且我正在使用requiredMessage在未输入值时显示一条消息。但它们都不适用于我的选择列表,如下所示: <p:pickList value="#{parameterValueDialog.selectedModelSeries}" var="item" itemValue="#{item}" required="true" converter="pickListConve

我有一个选择列表,它要求每次使用
required
时都提供一个值,并且我正在使用
requiredMessage
在未输入值时显示一条消息。但它们都不适用于我的选择列表,如下所示:

<p:pickList value="#{parameterValueDialog.selectedModelSeries}"
            var="item" itemValue="#{item}" required="true"
            converter="pickListConverter" requiredMessage="#{msg.validation_message}">

}

您可以通过在选择列表中提供验证程序方法来解决问题

在我的情况下,我的目标列表包含成员名称,我必须确保该列表至少包含一个成员,并且第一个成员具有特殊状态。首先,您必须将pickList返回的对象转换为DualListModel,并着手处理目标列表。然后,您可以检查它是否为空,并执行任何其他需要的验证。以下是我的验证器方法:

public void valideLocationsResponsables(FacesContext contexte, UIComponent composant, Object locationResps) throws ValidatorException {
    DualListModel<LocationsResponsables> dualListModel;
    if (locationResps instanceof DualListModel) {
        dualListModel = (DualListModel<LocationsResponsables>) locationResps;
        List<LocationsResponsables> listeResponsables = dualListModel.getTarget();
        ListIterator<LocationsResponsables> iterateur = listeResponsables.listIterator();
        // Your validation criteria here
        if (listeResponsables.isEmpty() || !iterateur.next().getIdMembreReserv().getStatut().isPeutReserver()) {
            ((UIInput) composant).setValid(false); // Pick list is made invalid
            FacesMessage msgErreur = new FacesMessage();
            msgErreur.setSeverity(FacesMessage.SEVERITY_ERROR);
            msgErreur.setDetail("Your error message here");
            throw new ValidatorException(msgErreur);
        }
    }
}
public void validLocationResponsables(FacesContext contexte、UIComponent component、Object locationResps)引发ValidatorException异常{
双列表模型双列表模型;
if(DualListModel的locationResps实例){
dualListModel=(dualListModel)位置响应;
List ListResponseTables=dualListModel.getTarget();
ListIterator iterateur=ListResponsables.ListIterator();
//这里是您的验证标准
if(listResponsables.isEmpty()| |!iterateur.next().getIdMembreReserv().getStatut().ispeuteReserver()){
((UIInput)composant).setValid(false);//拾取列表无效
FacesMessage msgErreur=新的FacesMessage();
msgErreur.setSeverity(FacesMessage.SEVERITY_错误);
msgErreur.setDetail(“此处为您的错误消息”);
抛出新的ValidatorException(msgErreur);
}
}
}
validator方法通过validator关键字连接到pickList中,如下所示:

        <p:pickList id="listeResp" value="#{locationsControleur.locationsResponsablesListe}" var="resp" effect="puff"
                            itemValue="#{resp}" itemLabel="#{resp.idMembreReserv.prenomNom}"
                            converter="#{locationsResponsablesListeConvertisseur}"
                            validator="#{locationsControleur.valideLocationsResponsables}">
                <f:facet name="sourceCaption">#{msgs.LocationsMembresEligibles}</f:facet>
                <f:facet name="targetCaption">#{msgs.LocationsResponsablesChoisis}</f:facet>
        </p:pickList>
                <p/><p/>
                <h:message id="listeRespMsg" for="listeResp" errorStyle="color: red"/>

#{msgs.locationsmemberseligibles}
#{msgs.LocationsResponsablesChoisis}


希望这能有所帮助。

显示转换器的
getAsObject()
。问题可能是由那里引起的。对于空字符串值,它可能错误地返回了非空值。@BalusC-包含的代码。
        <p:pickList id="listeResp" value="#{locationsControleur.locationsResponsablesListe}" var="resp" effect="puff"
                            itemValue="#{resp}" itemLabel="#{resp.idMembreReserv.prenomNom}"
                            converter="#{locationsResponsablesListeConvertisseur}"
                            validator="#{locationsControleur.valideLocationsResponsables}">
                <f:facet name="sourceCaption">#{msgs.LocationsMembresEligibles}</f:facet>
                <f:facet name="targetCaption">#{msgs.LocationsResponsablesChoisis}</f:facet>
        </p:pickList>
                <p/><p/>
                <h:message id="listeRespMsg" for="listeResp" errorStyle="color: red"/>