jsf – p:autoComplete itemLabel throws“类’java.lang.Strin
我正在从IceFaces变为PrimeFaces(我真的想改变RichFaces但是导致新版本中的错误,我不会)并且我正在努力实现正确的primefaces autoComplete.根据他的手册,我只需要实现一个返回对象列表的方法,在这种情况下需要一个转换器.
我正在返回的列表是javax.faces.model.SelectItem的列表,我真的不明白为什么我需要为此创建一个转换器,但让我们继续.我创建了一个简单的转换器来测试,但是primefaces无法识别我的转换器并在浏览器中返回此错误:
这是我的转换课程(只是为了测试): public class ConversorSelectItem implements Converter { @Override public Object getAsObject(FacesContext context,UIComponent component,String value) { if (value!=null && value.isEmpty()) return null; SelectItem selectItem=new SelectItem(); selectItem.setLabel(value); return selectItem; } @Override public String getAsString(FacesContext context,Object object) { return ((SelectItem)object).getLabel(); } } 这是我尝试使用p:autocomplete的地方: <p:autoComplete value="#{modeloPopupBuscaPessoa.itemSelecionado}" completeMethod="#{controladorSugestaoPessoa.atualizarSugestoes}" var="pessoa" itemLabel="#{pessoa.label}" itemValue="#{pessoa.value}" converter="#{conversorSelectItem}"/> 我做错了什么吗?是否有SelectItem的默认转换器?有没有更简单的方法来实现这个转换器? 解决方法
您不应该使用List< SelectItem>来提供它.你应该用List< Pessoa>来喂它.您也不应该专注于转换SelectItem.您应该专注于转换项目值,即Pessoa. SelectItem是旧JSF 1.x时代的遗留物.在JSF 2.x中,由于视图中的var,itemValue和itemLabel属性,这不再是强制性的.这样可以使bean保持清洁,避免特定于视图的混乱.
只要您使用itemValue =“#{pessoa}”并且#{modeloPopupBuscaPessoa.itemSelecionado}引用Pessoa属性,转换器就是必需的.然后,您应该在getAsString()中将Pessoa转换为其唯一的String表示形式(以便可以用HTML打印),并在getAsObject()中将String转换为Pessoa(以便可以在bean属性中设置). 但是,如果#{pessoa.value}是一个字符串并且#{modeloPopupBuscaPessoa.itemSelecionado}也是一个字符串,那么你应该只使用itemValue =“#{pessoa.value}”并完全删除转换器. 也可以看看: > PrimeFaces showcase: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |