如标题所述,我在通过 JSF 中的 EL 3 呈现静态值时遇到问题。
有一个类似我的问题,但它在 JSP 中并且有一个解决方法(参见 Access static property or method in JSP via EL 3.0 (JEE7; Tomcat 8))
问题是当我在我的任何 .xhtml 文件中使用像这样简单的东西时,什么都没有呈现
#{Boolean.TRUE}
虽然这个网站https://java.net/projects/el-spec/pages/StaticField说以下会起作用。
#{T(java.lang.Boolean).TRUE}
它也失败了,错误类似于
javax.el.ELException: Function 'T' not found
我已经尝试了 Access static property or method in JSP via EL 3.0 (JEE7; Tomcat 8) 中提到的解决方法.对 JSP 人员有效的解决方法是在他们的 Tomcat 库中用 javax.servlet.jsp-api-2.3.2-b01.jar 替换 jsp-api.jar。 这对我也不起作用 :(
对我有用的是独立实现,就像这样
ELProcessor elp = new ELProcessor(); Object ret = elp.eval("Boolean.FALSE"); getLog().info("Output Value: " + ret);
我确实得到了这样的正确输出
2015-10-07 17:38:13 INFO WelcomeAction:38 - Output Value: false
我尝试了真值和假值,它们都运行良好。不确定此信息是否有帮助,但我将 spring 4.1.1 与 webflow 2.4.1 一起使用。我还尝试了两个不同的 tomcat 实例 8.0.14 和 8.0.27,但都没有用。
不可能只有我一个人在处理这个问题。我还没有找到关于此的错误报告,尽管有人报告并解决了 JSP https://java.net/jira/browse/GLASSFISH-20778
非常感谢有关 meow 的一些帮助。提前致谢。阿罗哈!
最佳答案
The issue is nothing is being rendered when I use something as simple as this in any of my .xhtml files
#{Boolean.TRUE}
不幸的是,它只能通过 ${Boolean.TRUE}
在 JSP 中工作,不在 Facelets 中。
Although this site https://java.net/projects/el-spec/pages/StaticField says the following would work.
#{T(java.lang.Boolean).TRUE}
该站点仅包含提案/原型(prototype)。最后的实现确实是做的不一样。对于最终实现,请阅读 EL 3.0 specification文件代替。
基本上,更改需要在 Facelets 端完成,而不是在 EL 端。 EL 3.0 提供对静态字段的支持,但 Facelets 根本没有利用它。即使是 EL 3.0 import handler毕竟在 Facelets 中不起作用。这很可能是一个疏忽。我有 pinged关于这个的 JSF EG。
与此同时,最好的办法是创建一个自定义标签处理程序来完成这项工作。 JSF 实用程序库 OmniFaces在其分类中有这样的标签处理程序, <o:importConstants>
.
关于java - 通过 EL 3 (Tomcat 8.0.14/27) 访问 JSF 中的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006610/