是否可以使用FacesContext
或其他隐式对象(如request
,session
等)嵌套EL中的变量调用?这当然不起作用。我收到此错误
错误解析:#{myBean.myMethod(#{FacesContext.getCurrentInstance()。getViewRoot()。getViewId()})}
这次尝试
<ui:include src="#{myBean.myMethod(#{FacesContext.getCurrentInstance().getViewRoot().getViewId() })}">
答案 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功能非常强大,但我认为它的功能很诱使您将业务逻辑放在表示层中。