在EL中嵌套变量

时间:2011-08-25 00:36:11

标签: jsf-2 nested el

是否可以使用FacesContext或其他隐式对象(如requestsession等)嵌套EL中的变量调用?这当然不起作用。我收到此错误

  

错误解析:#{myBean.myMethod(#{FacesContext.getCurrentInstance()。getViewRoot()。getViewId()})}

这次尝试

<ui:include src="#{myBean.myMethod(#{FacesContext.getCurrentInstance().getViewRoot().getViewId() })}">

2 个答案:

答案 0 :(得分:3)

这确实是无效的EL语法。禁止嵌套#{}。只需将整个表达式置于同一#{}内。另外,Facelets的EL范围中不存在#{FacesContext},它是#{facesContext},它已经是当前实例。此外,如果已经是getter方法,则不一定需要用括号指定整个方法名称。

所以,这应该做

<ui:include src="#{myBean.myMethod(facesContext.viewRoot.viewId)}">

(请注意,这仍然需要一个支持Servlet 3.0 / EL 2.2的目标容器)

答案 1 :(得分:1)

为了增加BalusC的答案,我想评论一下,作为一般规则,让你的EL表达式尽可能简单,并将所有逻辑 - 特别是复杂的逻辑 - 放在支持bean的Java中。为什么不在MyBean中创建一个新的Java方法来做你想做的事情并且只是引用它?

EL功能非常强大,但我认为它的功能很诱使您将业务逻辑放在表示层中。