文档说支持参数,但示例使用的是hl
和#
,我不知道在哪里使用c:和$而不是来自docs的文件:
<h:inputText value="#{userNumberBean.userNumber('5')}">
我所知道的所有关于EL中的$ vs#都与rvalue和lvalue有关,我可以在使用#style时进一步解释。我正在寻找typ $ ...的EL表达式如何获取参数以及如何使用参数调用非getter非setter,例如从请求上下文中的bean中获取常量静态字符串。
#与$相比有什么作用?如果我想使用$,如何在EL中使用参数?
我想要迁移到EL的scriptlet类似于我想在EL中执行的<%= Constants.CONSTANT %>
和<%= object.method(parameter) %>
。
答案 0 :(得分:4)
#{}
语法应仅在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中引用常量是另一回事。这将是即将发布的EL 3.0中的introduced,它是未来Java EE 7 / Servlet 3.1的一部分(可能未来的WAS 9或10将支持它)。有自定义标记库的风格解决方案或将它们保存在Map
中,所有这些都在此答案中详细解释:How to reference constants in EL?