我在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而没有转换器?
感谢。
答案 0 :(得分:2)
新版本的JSF支持
itemLabel与对象和没有转换器吗?
那是对的。从JSF 2.3开始,绑定到<h:selectManyXxx>
的{{1}}组件不需要显式转换器。这是作为规范issue 1422的一部分实现的。
显然,您实际上是在一个环境中运行Java EE 8 / JSF 2.3,而在另一个环境中运行Java EE 7 / JSF 2.2。这不是开发应用程序的好方法。您应该在所有开发环境中针对预期的最低支持版本进行开发。