文档说支持参数,但示例使用 hl
和#
我不知道我在哪里使用 c: 和 $ 而不是来自文档的这个:
<h:inputText value="#{userNumberBean.userNumber('5')}">
我对 EL 中 $ 与 # 的了解是,这与右值和左值有关,我需要进一步解释何时使用 # 样式。我正在寻找类型 $... 的 EL 表达式如何获取参数以及如何使用参数调用非 getter 非 setter,例如从请求上下文中的 bean 获取常量静态字符串。
# 与 $ 相比有何作用?如果我想使用$,如何在EL中使用参数?
我想要迁移到 EL 的 scriptlet 类似于 <%= Constants.CONSTANT %>
和<%= object.method(parameter) %>
我想在 EL 中做的事情。
最佳答案
#{}
语法应该在 the Java EE's MVC framework JSF 中使用仅有的。另请参阅Difference between JSP EL, JSF EL and Unified EL 。只需坚持旧 JSP 中的 ${}
语法即可。
关于调用带参数的方法,这是在 Servlet 3.0/EL 2.2 中引入的。 WAS 8 是一个 Servlet 3.0 容器,因此它应该开箱即用地支持它。您只需确保您的 web.xml
被声明为符合 Servlet 3.0 规范版本。否则,容器将以与 web.xml
指示的版本匹配的后备方式运行。正确的 Servlet 3.0 web.xml
声明如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Config here. -->
</web-app>
这样 ${object.method(param)}
必须起作用。
在 EL 中引用常量则是另一回事。这将是 introduced在即将推出的 EL 3.0 中,它是 future Java EE 7/Servlet 3.1 的一部分(并且 future 的 WAS 9 或 10 可能会支持它)。有一些自定义标签库风格的解决方案或将它们保存在 Map
中,所有这些都在这个答案中详细解释:How to reference constants in EL?
另请参阅:
关于java - EL 相当于 WAS 8 中的 <%= object.method(parameter) %>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742174/