迭代getAsObject()方法中PrimeFaces自动完成元素的建议列表
我有一个迭代getAsObject()方法中PrimeFaces自动完成元素的建议列表,primefaces,autocomplete,converter,pojo,Primefaces,Autocomplete,Converter,Pojo,我有一个p:autoCompletePF元素来处理POJO建议列表,我为它创建了一个Converter类来将POJO映射为字符串,反之亦然 <p:autoComplete value="#{bean.pojoTargetList}" completeMethod="#{bean.getPOJOFilteredList}" var="pojo" itemLabel="#{pojo.name}" itemValue="#{pojo}" converter="pojoConverter" /&g
p:autoComplete
PF元素来处理POJO建议列表,我为它创建了一个Converter
类来将POJO映射为字符串,反之亦然
<p:autoComplete value="#{bean.pojoTargetList}" completeMethod="#{bean.getPOJOFilteredList}" var="pojo" itemLabel="#{pojo.name}"
itemValue="#{pojo}" converter="pojoConverter" />
也许我错了,但我的理解是getAsObject()
方法的uiComponent
参数是对p:autoComplete
PF元素的引用。如果是这样,我可以访问POJO建议列表。因此,我可以对它进行迭代,并找到与值
参数匹配的POJO对象
如果有人能解释如何从getAsObject()
方法访问p:autocomplete
元素的pojo建议列表,我将不胜感激
@FacesConverter("pojoConverter")
public class POJOConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent uiComponent, String value) {
// ?
return pojo;
}
@Override
public String getAsString(FacesContext arg0, UIComponent uiComponent, Object assetTag) {
String _return = null;
...
return _return;
}
更新:
也许我错了,但我的理解是
getAsObject()
方法的uiComponent
参数是对p:autoComplete
PF元素的引用。如果是这样,我可以访问bean.getPOJOFilteredList
。因此,我可以迭代bean.getPOJOFilteredList
并找到与值匹配的POJO对象。是的,转换器需要访问他期望返回的对象。实现可能如下所示:
@FacesConverter("userConverter")
public class UserConverter implements Converter {
@Inject
UserDirectory userDirectory;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String uid) {
return uid == null || uid.isEmpty() ? null : userDirectory.findByUid(uid);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object user) {
final String uid = user instanceof User ? ((User) user).getUid() : null;
return StringUtils.defaultIfEmpty(uid, "");
}
}
自动完成方法必须独立实现,并应根据部分输入返回特定对象的列表,不区分大小写,等等:
public List<User> autoCompleteUser(String queryString) {
// implement custom retrieval / filter logic
return filteredUsers;
}
公共列表自动完成器(字符串查询字符串){
//实现自定义检索/过滤逻辑
回流过滤器;
}
是的,转换器需要访问预期返回的对象。实现可能如下所示:
@FacesConverter("userConverter")
public class UserConverter implements Converter {
@Inject
UserDirectory userDirectory;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String uid) {
return uid == null || uid.isEmpty() ? null : userDirectory.findByUid(uid);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object user) {
final String uid = user instanceof User ? ((User) user).getUid() : null;
return StringUtils.defaultIfEmpty(uid, "");
}
}
自动完成方法必须独立实现,并应根据部分输入返回特定对象的列表,不区分大小写,等等:
public List<User> autoCompleteUser(String queryString) {
// implement custom retrieval / filter logic
return filteredUsers;
}
公共列表自动完成器(字符串查询字符串){
//实现自定义检索/过滤逻辑
回流过滤器;
}
我要做的是从getAsObject()
方法中的UIComponent参数访问bean.getPOJOFilteredList
。您的建议是使用注入属性来访问这样的列表。这不是我要找的。请看我的更新。在您的情况下,具体的UIComponent
将是org.primefaces.component.autocomplete.autocomplete
类型。其他组件在内部引用包含所有选项的模型,但autoComplete
使用completeMethod
动态接收它们。我怀疑AutoComplete
是否包含对您的bean的引用。我的出发点是从getAsObject()
方法中的UIComponent参数访问bean.getPOJOFilteredList
。您的建议是使用注入属性来访问这样的列表。这不是我要找的。请看我的更新。在您的情况下,具体的UIComponent
将是org.primefaces.component.autocomplete.autocomplete
类型。其他组件在内部引用包含所有选项的模型,但autoComplete
使用completeMethod
动态接收它们。我怀疑AutoComplete
是否引用了您的bean。为什么不使用Omnifaces的转换器呢?他们已经考虑过了。为什么不使用Omnifaces的转换器呢?他们考虑过这一切。