【问题标题】:Nesting variables in EL在 EL 中嵌套变量
【发布时间】:2011-11-03 06:37:12
【问题描述】:

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

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

为了这次尝试

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

【问题讨论】:

  • 至于您尝试接受的答案:未注册的用户帐户由浏览器 cookie 支持,因此与特定的 PC/浏览器相关联。您需要通过 OpenID 注册您的用户帐户,以便您能够在所有 PC/网络浏览器中使用相同的用户帐户。否则,您需要从您发布问题的地方返回 PC/网络浏览器(如果未删除 cookie)。一旦您注册了您的用户帐户,版主就可以将任何悬空的未注册用户帐户与您新注册的帐户合并。

标签: jsf-2 nested el


【解决方案1】:

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

所以,应该这样做

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

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

【讨论】:

    【解决方案2】:

    要添加到 BalusC 的答案,我想评论一下,作为一般规则,使您的 EL 表达式尽可能简单,并将所有逻辑(尤其是复杂逻辑)放在支持 bean 的 Java 中。为什么不在 MyBean 中创建一个新的 Java 方法来执行您想要的操作并引用它?

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

    【讨论】:

    • 虽然我绝对同意应该非常小心,不要将一盎司的业务逻辑放入视图中,但决定是否应该呈现某些内容的表达式肯定可以在视图中使用。并非每个表达式都应该是对属性的简单绑定。还要意识到真正的业务逻辑也不应该在支持bean中,它几乎总是只是xhtml视图和一些业务服务之间的管道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2016-11-16
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多