0

文档说参数是受支持的,但是示例使用了hl并且#我不知道我在哪里使用 c: 和 $ 而不是来自文档的这个:

<h:inputText value="#{userNumberBean.userNumber('5')}">

我所知道的关于 EL 中的 $ vs # 是与右值和左值有关,我需要进一步解释何时使用 # 样式。我正在寻找 typ $... 的 EL 表达式如何获取参数以及如何使用参数调用非 getter 非 setter,例如从请求上下文中的 bean 获取常量静态字符串。

# 与 $ 相比有什么作用?如果我想使用 $,如何在 EL 中使用参数?<%= Constants.CONSTANT %>我想迁移到 EL的scriptlet 类似于<%= object.method(parameter) %>我想在 EL 中执行的操作。

4

1 回答 1

4

#{}语法应该只在Java EE 的 MVC 框架 JSF中使用。另请参阅JSP EL、JSF EL 和 Unified EL 之间的区别。只需坚持${}旧 JSP 中的语法即可。

至于使用参数调用方法,这是在 Servlet 3.0 / EL 2.2 中引入的。WAS 8 是一个 Servlet 3.0 容器,因此它应该支持它。您只需要确保您web.xml的声明符合 Servlet 3.0 规范版本。否则,容器将以与 . 指示的版本匹配的回退方式运行web.xml。正确的 Servlet 3.0web.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 中引入,它是未来 Java EE 7 / Servlet 3.1 的一部分(未来的 WAS 9 或 10 可能会支持它)。有自定义标记库风格的解决方案或将它们保存在 a 中Map,所有这些都在这个答案中详细解释:如何在 EL 中引用常量?

也可以看看:

于 2012-05-24T17:17:44.463 回答