本文介绍了在 JSF 1.2 中通过 EL 调用带参数的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是数据表,每一行都有两个按钮,一个编辑"和一个删除".

I am using a datatable and for each row I have two buttons, an "Edit" and a "Delete".

如果相关行满足特定条件,我需要将这些按钮设为只读,即禁用.我在 JSF 2 中看到可以将参数传递给方法调用.JSF 1.2 中是否有任何等效的东西?

I need these buttons to be read-only, i.e. disabled, if a certain condition is met for the row in question. I have seen in JSF 2 that it is possible to pass parameters to method calls. Is there anything equivalent in JSF 1.2?

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

Ideally what I would like it something like (the looping variable is loop and there is another bean, helper, which contains the method I would like to invoke):

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

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

In this case it does not make semantic sense to add an isEditable attribute to the bean and it is not practical to create a wrapper Object around the bean.

提前致谢.

推荐答案

向方法调用传递参数并非特定于 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 设计框.

Passing parameters to method calls is not specific to JSF 2. It is specific to EL 2.2, which is in turn part of JSP 2.2 / Servlet 3.0 / Java EE 6. JSF 2 just happens to be part of Java EE 6 as well. In other words, if you deploy your JSF 1.2 web application to a Servlet 3.0 compatible container like Tomcat 7, Glassfish 3, etc and your web.xml is declared conform Servlet 3.0 spec version, then it'll just work out the box for JSF 1.x as well.

但是,如果您仍然针对旧 Servlet 版本的容器,那么您需要提供不同的 EL 实现,该实现支持使用参数调用方法.其中一种实现是 JBoss-EL 只需删除 jboss-el.jar 文件在/WEB-INF/lib您的 web 应用程序并将以下上下文参数添加到 web.xml.这是 Mojarra 特定的示例(Mojarra 是 JSF RI 的代号):

If you're however still targeting a container of an older Servlet version, then you need to supply a different EL implementation which supports invoking methods with arguments. One of those implementations is JBoss-EL which you can install by just dropping the jboss-el.jar file in /WEB-INF/lib of your webapp and adding the following context parameter to the web.xml. Here's a Mojarra-specific example (Mojarra is the codename of JSF RI):

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

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

If you're using MyFaces as JSF implementation, you need the following context parameter instead:

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

另见:

08-11 22:08