加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

jsf – p:autoComplete itemLabel throws“类’java.lang.Strin

发布时间:2020-12-14 23:21:51 所属栏目:Java 来源:网络整理
导读:我正在从IceFaces变为PrimeFaces(我真的想改变RichFaces但是导致新版本中的错误,我不会)并且我正在努力实现正确的primefaces autoComplete.根据他的手册,我只需要实现一个返回对象列表的方法,在这种情况下需要一个转换器. 我正在返回的列表是javax.faces.mod
我正在从IceFaces变为PrimeFaces(我真的想改变RichFaces但是导致新版本中的错误,我不会)并且我正在努力实现正确的primefaces autoComplete.根据他的手册,我只需要实现一个返回对象列表的方法,在这种情况下需要一个转换器.

我正在返回的列表是javax.faces.model.SelectItem的列表,我真的不明白为什么我需要为此创建一个转换器,但让我们继续.我创建了一个简单的转换器来测试,但是primefaces无法识别我的转换器并在浏览器中返回此错误:

/resources/components/popups/popupBuscaPessoa.xhtml @35,41 itemLabel=”#{pessoa.label}”: The class ‘java.lang.String’ does not have the property ‘label’.

这是我的转换课程(只是为了测试):

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: <p:autoComplete> with POJO
> Can I use omnifaces generic converter in primefaces autocomplete component?
> Conversion Error setting value for ‘null Converter’

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读