我有一个选项列表,每次使用 required
时都需要提供一个值,并且我使用 requiredMessage
在未输入值时显示消息。但它们都不适用于我的选择列表,如下所示:
<p:pickList value="#{parameterValueDialog.selectedModelSeries}"
var="item" itemValue="#{item}" required="true"
converter="pickListConverter" requiredMessage="#{msg.validation_message}">
有人知道如何解决这个问题吗?这是 Primefaces 库本身的问题吗?
编辑:发布getAsObject()
方法
@Override
public final Object getAsObject(final FacesContext ctx, final UIComponent component, final String string) {
Object returnObject = null;
Object dualList = ((PickList) component).getValue();
DualListModel<Item<?>> listModel = (DualListModel<NamedItem<?>>) dualList;
for (Item<?> item : listModel.getSource()) {
String id = String.valueOf(item.getId());
if (string.equals(id)) {
returnObject = item;
break;
}
}
if (returnObject == null) {
for (Item<?> item : listModel.getTarget()) {
String id = String.valueOf(item.getId());
if (string.equals(id)) {
returnObject = item;
break;
}
}
}
return returnObject;
}
最佳答案
您可以通过提供在 pickList 中使用的验证器方法来解决您的问题。
就我而言,我的目标列表包含成员姓名,我必须确保该列表至少包含一个成员,并且第一个成员具有特殊状态。您首先必须将 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);
}
}
}
验证器方法通过验证器关键字挂接到 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"/>
希望这能有所帮助。
关于jsf - Primefaces 选择列表 'required' 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119054/