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

时间:2018-05-31 21:16:06

标签: jsf jsf-2

我在Java(NetBeans 8.2)中创建了企业应用程序,它有2个EJB模块和一个基于JSF 2.2的Web应用程序。该应用程序在我的NetBeans版本中工作,但是当我在另一台PC上传输此应用程序并将其部署到那里时,它会显示一些错误。 问题所在的地方如下:

                <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类型的对象,我没有任何自定义转换器将其转换回对象。即使我没有自定义转换器,这也适用于我的电脑。但是,当我在另一台PC上传输应用程序并在那里部署它时,它无法正常工作,NetBeans会显示此错误:java.lang.String cannot be cast to org.foi.nwtis.ivicelig.ejb.eb.Parkiralista。所以我的问题是为什么这适用于我的第一台电脑,而不是我的第二台电脑。新版本的JSF是否支持带对象的itemLabel而没有转换器?  感谢。

1 个答案:

答案 0 :(得分:2)

  

新版本的JSF支持 itemLabel与对象没有转换器吗?

那是对的。从JSF 2.3开始,绑定到<h:selectManyXxx>的{​​{1}}组件不需要显式转换器。这是作为规范issue 1422的一部分实现的。

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