在 JSF 1.2 中通过 EL 调用带参数的方法

Posted

技术标签:

【中文标题】在 JSF 1.2 中通过 EL 调用带参数的方法【英文标题】:Invoking methods with parameters by EL in JSF 1.2 【发布时间】:2012-01-09 15:37:08 【问题描述】:

我正在使用一个数据表,对于每一行我有两个按钮,一个“编辑”和一个“删除”。

如果相关行满足特定条件,我需要将这些按钮设为只读,即禁用。我在 JSF 2 中看到可以将参数传递给方法调用。 JSF 1.2 中有什么等价的吗?

理想情况下,我希望它类似于(循环变量是 loop,还有另一个 bean,helper,其中包含我要调用的方法):

<h:commandButton value="Edit"
                   disabled="#helper.isEditable(loop.id)" />

在这种情况下,将 isEditable 属性添加到 bean 并没有语义意义,并​​且在 bean 周围创建包装对象也不实际。

提前致谢。

【问题讨论】:

【参考方案1】:

我在 JSF 2 中看到可以将参数传递给方法调用。 JSF 1.2 中有什么等价的吗?

将参数传递给方法调用不是特定于 JSF 2。它特定于 EL 2.2,而后者又是 JSP 2.2 / Servlet 3.0 / Java EE 6 的一部分。JSF 2 恰好也是 Java EE 6 的一部分。换句话说,如果您将 JSF 1.2 Web 应用程序部署到与 Servlet 3.0 兼容的容器(如 Tomcat 7、Glassfish 3 等)并且您的 web.xml 被声明为符合 Servlet 3.0 规范版本,那么它就可以满足 JSF 的要求1.x 也是如此。

但是,如果您仍然以旧 Servlet 版本的容器为目标,那么您需要提供一个不同的 EL 实现,它支持使用参数调用方法。其中一种实现是JBoss-EL,您可以通过将jboss-el.jar 文件放入您的webapp 的/WEB-INF/lib 并将以下上下文参数添加到web.xml 来安装它。这是一个特定于 Mojarra 的示例(Mojarra 是 JSF RI 的代号):

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

如果您使用 MyFaces 作为 JSF 实现,则需要以下上下文参数:

<context-param>
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

另见:

Invoke direct methods or methods with arguments / variables / parameters in EL

【讨论】:

以上是关于在 JSF 1.2 中通过 EL 调用带参数的方法的主要内容,如果未能解决你的问题,请参考以下文章

JSF MethodExpression javax.el.PropertyNotFoundException

Java中通过反射获取带参数类型的方法

如何在 Tomcat 中通过 JNDI 配置 JSF 2.0 应用程序的项目阶段

在 Eclipse 中显示 JSF EL 调用层次结构

JBoss 6 上的 JSF 1.2 和 EL 表达式未解决

命令行中通过adb shell am broadcast发送带参数广播