我不确定这是否可行...但我想使用自动完成组件,其中 value 属性的类型为 String 并且 completeMethod 返回一些重对象的列表。
使用forceSelection="false"
也是我的要求
我认为这是可行的(但行不通):
<p:autoComplete id="it_demandeur"
value="#{utilisateurDemandeurCtrl.critereRechercheDemandeur}"
var="demandeurItem"
itemLabel="#{demandeurItem ne null ? demandeurItem.numeroOW.toString().concat(' - ').concat(demandeurItem.nom) : ''}"
itemValue="#{demandeurItem.nom}"
completeMethod="#{utilisateurDemandeurCtrl.completeDemandeur}"
minQueryLength="3"
cacheTimeout="10000">
<p:column>
#{demandeurItem.numeroOW} - #{demandeurItem.nom}
</p:column>
</p:autoComplete>
这是返回建议列表的方法:
@SuppressWarnings("unchecked")
public List<Demandeur> completeDemandeur(String query) {
StringBuilder jpql = new StringBuilder(128);
jpql.append("SELECT d");
jpql.append(" FROM Demandeur d");
jpql.append(" WHERE UPPER(d.nom) LIKE :query");
jpql.append(" OR d.numeroOW LIKE :query");
Query demandeurQuery = em.createQuery(jpql.toString());
demandeurQuery.setParameter("query", "%" + query.toUpperCase() + "%");
return (List<Demandeur>) demandeurQuery.getResultList();
}
如果用户选择一个建议,它会将 itemValue 设置为所选建议的名称,但会显示 Demandeur 对象中包含 2 个值的串联字符串。
建议确实出现了,我可以选择它们,但不幸的是,我在提交页面时遇到了这个错误:
Exception message: /page/utilisateur.xhtml at line 27 and column 50 itemLabel="#{demandeurItem ne null ? demandeurItem.numeroOW.toString().concat(' - ').concat(demandeurItem.nom) : ''}": Property 'numeroOW' not found on type java.lang.String
My understanding is that the var attribute of the autoComplete component is an iterator on the suggestions, so in my case of type Demandeur, not String.
Any help would be appreciated!
Thanks
I am using primefaces 3.5.11, MyFaces implementation for JSF on Websphere 8.5.5.0
Edit:
Here is the converter I tried with
@FacesConverter(value = "demandeurUIConverter")
public class DemandeurConverter implements Serializable, Converter {
private static final long serialVersionUID = 1L;
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) throws ConverterException {
if (value == null || value.length() == 0) {
return null;
}
ConverterCtrl cc = EJB.lookup(ConverterCtrl.class);
Demandeur d = cc.getDemandeurFromCle(value);
if (d == null) {
d = new Demandeur();
d.setNom(value);
d.setNumeroOW(value);
}
return d;
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) throws ConverterException {
if (value == null) {
return "";
}
Demandeur demandeur = (Demandeur) value;
return demandeur.getNom();
}
}
最佳答案
如果您为 Demandeur
制作一个转换器,这将起作用。
关于java - 具有不同值类型的建议和组件值的 Primefaces 自动完成组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18259228/