通过 EL 3 (Tomcat 8.0.14/27) 访问 JSF 中的静态成员

Access static members in JSF via EL 3 (Tomcat 8.0.14/27)

如标题所述,我在通过 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 人有效的解决方法是将 jsp-api.jar 替换为 javax.servlet.jsp-api-2.3.2-b01.jar 在他们的 Tomcat 库。 这对我也不起作用:(

对我有用的是独立实现,就像这样

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

我试过 true 和 false 值,它们工作正常。不确定此信息是否有帮助,但我正在使用 spring 4.1.1 和 webflow 2.4.1。我还尝试了两个不同的 tomcat 实例 8.0.14 和 8.0.27,但都没有用。

不可能只有我一个人在处理这个问题。我还没有找到关于这个的错误报告,尽管有人报告并解决了 JSP https://java.net/jira/browse/GLASSFISH-20778

非常感谢有关喵喵的帮助。提前致谢。阿罗哈!

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}

该站点仅包含 proposals/prototypes。最后的实现确实是做的不一样。对于最终实现,请改为阅读 EL 3.0 specification 文档。


基本上,更改需要在 Facelets 端完成,而不是在 EL 端。 EL 3.0 提供对静态字段的支持,但 Facelets 根本没有利用它。即使是 EL 3.0 import handler after all doesn't work in Facelets. It's likely an oversight. I've pinged JSF EG 也是如此。

与此同时,最好的办法是创建一个自定义标签处理程序来完成这项工作。 JSF 实用程序库 OmniFaces has exactly such taghandler in its assortiment, the <o:importConstants>.