为什么我的 f:selectItems 不需要自定义转换器?

Why do I not need a custom converter for my f:selectItems?

我在 Java ( NetBeans 8.2 ) 中制作了企业应用程序,它有 2 个 EJB 模块和一个基于 JSF 2.2 的 Web 应用程序。该应用程序在我的 NetBeans 版本中运行,但是当我将此应用程序传输到另一台电脑并部署到那里时,它显示了一些错误。 问题所在的地方是这样的:

                <h:selectManyListbox class = "selectManyListBox" id="parkiralista" value="#{pregled.odabranaParkiralista}" >
                    <f:ajax event="valueChange" execute="@this" render="" />
                    <f:selectItems value="#{pregled.popisParkiralista}"
                                   var="p"
                                   itemLabel="#{p.adresa.concat('; ').concat(p.naziv).concat('; ').concat(p.id.toString())}"
                                   itemValue="#{p}"/>
                </h:selectManyListbox>

所以这个 itemValue="#{p}"/> 是 Parkiralista 类型的对象,我没有任何自定义转换器可以将它转换回对象。即使我没有自定义转换器,这也适用于我的电脑。但是,当我将应用程序转移到另一台电脑上并将其部署到那里时,它不起作用并且 NetBeans 显示此错误:java.lang.String cannot be cast to org.foi.nwtis.ivicelig.ejb.eb.Parkiralista。所以我的问题是为什么这适用于我的第一台电脑而不是我的第二台电脑。新版本的 JSF 是否支持带对象但不带转换器的 itemLabel? 谢谢

Does new version of JSF supports itemLabel with object and without converter?

没错。从 JSF 2.3 开始,绑定到 List<T><h:selectManyXxx> 组件不需要显式转换器。这是作为规范 issue 1422.

的一部分实现的

显然,您在一个环境中实际上是 运行 Java EE 8 / JSF 2.3,在另一个环境中是 Java EE 7 / JSF 2.2。这不是开发应用程序的好方法。您应该在所有开发环境中针对预期的最低支持版本进行开发。