将参数传递给h:outputtext标记中的方法

时间:2011-12-07 11:09:07

标签: jsf el

我想通过将属性传递给在backing bean中实现的方法来在jsf屏幕中显示文本。我必须将动态值作为属性传递。我尝试了下面但似乎是一个不正确的语法 -

<h:outputText value="#{getValue(#{item.product}).component.address}" />

2 个答案:

答案 0 :(得分:11)

除了语法错误(你永远不能像#{#{}}那样嵌套EL表达式),以下内容在EL 2.2中有效,而后者又是Servlet 3.0 / Java EE 6的一部分:

<h:outputText value="#{bean.getValue(item.product).component.address}" />

因此,如果你有一个Servlet 3.0兼容的目标运行时(Tomcat 7,Glassfish 3,JBoss 6等)与Servlet 3.0兼容web.xml,那么你可以使用这样的参数调用非getter方法。

但是,根据您的问题历史记录,您使用的是JSF 1.2,并且您还有一个很大的机会,那就是您也将目标锁定在旧容器上,而上述容器无效。如果它是Servlet 2.5容器,那么您可以使用JBoss EL来使这个EL语法工作。

另见:

答案 1 :(得分:3)

JSF 1.2 w / EL 2.1(通常的配对)不支持使用EL表达式在bean上调用带参数的方法。 存在一个hack,滥用JSF EL表达式在地图上工作的事实:

value="#{myBean['product']}"

这将假设myBean正在实现Map接口,并将调用带有'product'作为参数的get方法。我不知道密钥是否可以动态计算,但值得一试。 语法是:

value="#{myBean[item.product].component.address}"

假设myBean实现了Map接口并返回了相应的对象,而item.product则返回一个字符串。 我不确定这是否有效,但除了实现在其实现中查找item.product值的getter之外,它是你唯一的选择。