【问题标题】:javax.el.PropertyNotFoundException: Property 'toArray' not found on type org.hibernate.collection.internal.PersistentSetjavax.el.PropertyNotFoundException:在类型 org.hibernate.collection.internal.PersistentSet 上找不到属性“toArray”
【发布时间】:2013-04-18 05:34:59
【问题描述】:

我正在使用hashset.toArray()[x] 在 jsf 视图中显示一个元素,这在我的机器上运行良好。 但是当我把它移到测试服务器上时,就会抛出上述错误。

两台机器都运行tomcat 7。

是什么导致了这个错误?

【问题讨论】:

  • 本地和测试服务器上的 Hibernate 版本?还有 JSF 版本在本地和测试中?
  • 这很奇怪,因为消息是正确的。 PersistentSet 有一个方法 toArray,而不是一个属性。 EL 实际上是在尝试访问属性getToArray(),结果是异常。请向我们展示在您的机器上运行的代码(jsf + bean)。在显示标签中使用它实际上不应该工作 AFAIK。

标签: java jsf-2 el


【解决方案1】:

在 EL 2.2 中引入了在 EL 中调用任意非属性相关方法的能力,它与 Servlet 3.0 齐头并进。此功能在 Servlet 2.5 / EL 2.1 等旧版本中不存在。

因此,如果您将 web 应用程序部署到具有 Servlet 3.0 兼容的 web.xml 根声明的 Servlet 3.0 兼容容器,那么它将正常工作。但是,如果您将 webapp 部署到旧版本的容器,或者使用指示旧版本的 web.xml,或者在 webapp 的 /WEB-INF/lib 甚至服务器自己的 @ 中删除了旧版本的任意容器特定 JAR 文件987654325@,则此功能将无法使用。

如果您绝对肯定测试服务器正在运行 Tomcat 7 而不是 Tomcat 6 左右,那么这只能意味着 web.xml 已更改为指示旧版本,或者您的 webapp 或服务器的/lib 到处都是任意特定于容器的 JAR 文件,例如 jsp-api.jarel-api.jar 等,它们只会与容器自己的库冲突(这通常由无知的初学者完成,以解决他们在自己的程序中遇到的编译错误IDE;应该已经解决了differently)。

【讨论】:

  • 感谢 Balusc 的详细解答
猜你喜欢
  • 2015-10-09
  • 2017-09-01
  • 2012-05-03
  • 2014-10-20
  • 2014-10-31
  • 2012-06-06
相关资源
最近更新 更多