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

时间:2015-10-08 04:25:08

标签: java jsf tomcat el static-members

正如标题所述,我遇到了在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.E​​LException:找不到函数“T”

我已经开始尝试Access static property or method in JSP via EL 3.0 (JEE7; Tomcat 8)中提到的解决方法。适用于JSP人员的解决方法是在他们的Tomcat lib中用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 - 输出值:false

我尝试了真值和假值,他们工作得很好。不确定这些信息是否有帮助,但我正在使用带有webflow 2.4.1的spring 4.1.1。我还尝试了两个不同的tomcat实例8.0.14和8.0.27,但都没有工作。

我无法解决这个问题。我还没有找到关于这个的错误报告,尽管已经报告并解决了JSP https://java.net/jira/browse/GLASSFISH-20778

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

1 个答案:

答案 0 :(得分:3)

  

当我在任何.xhtml文件中使用像这样简单的东西时,问题就是没有呈现

     

#{Boolean.TRUE}

不幸的是,这只能通过${Boolean.TRUE}在JSP中运行,而不是在Facelets中运行。

  

虽然此网站https://java.net/projects/el-spec/pages/StaticField表示以下内容可行。

     

#{T(java.lang.Boolean).TRUE}

该网站仅包含提案/原型。最终的实施确实以不同的方式完成。对于最终实施,请改为阅读EL 3.0 specification文档。

基本上,需要在Facelets方面进行更改,而不是在EL方面。 EL 3.0提供对静态字段的支持,但Facelets根本就没有使用它。毕竟EL 3.0 import handler在Facelets中不起作用。这可能是疏忽。我已经pinged了JSF EG。

同时,最好的办法是创建一个自定义标签处理程序来完成这项工作。 JSF实用程序库OmniFaces在其组合<o:importConstants>中具有完全相同的标记处理程序。