有条件地调用rich:popup面板

时间:2012-01-21 23:17:03

标签: jsf-2 richfaces

Hello Everyone我想在一个条件表达式中打开一个rich:popupPanel,其实我正在尝试的是这样的:

onclick="#{searchBackingBean.showLoginPanel==true ? #{rich:component('loginPopup')}.show();':''}"

但是我收到了与EL相关的错误,我应该如何正确地写这个? 非常感谢。

2 个答案:

答案 0 :(得分:4)

您可能无法嵌套EL表达式。我建议按如下方式重写表达式,以便将条件委托给JavaScript:

onclick="if (#{searchBackingBean.showLoginPanel}) #{rich:component('loginPopup')}.show();"

(请注意我删除了多余的== true比较,因为这没有意义,因为该方法已经返回/打印一个布尔值)

请注意,这仅适用于<rich:xxx><a4j:xxx>组件,因为它们增强了on*属性,以便在回发时重新评估EL表达式。标准JSF <h:xxx>组件不会这样做。您需要使用rendered属性解决方法:

<h:commandButton>
    <f:ajax render="script" />
</h:commandButton>
<h:panelGroup id="script">
    <h:panelGroup rendered="#{searchBackingBean.showLoginPanel}">
        <script>#{rich:component('loginPopup')}.show();</script>
    </h:panelGroup>
</h:panelGroup>

答案 1 :(得分:0)

我所做的是将面板放在panelGroup或其他可以渲染的容器中。然后根据条件设置该容器的呈现标志,并在可能必须显示时调用该容器的呈现。

类似的东西:

<a4j:commandButton ... render="popup"/>

<a4j:outputPanel id="popup" rendered="#{searchBackingBean.showLoginPanel}">
    <script>
        #{rich:component('loginPopup')}.show();
    </script>
</a4j:outputPanel>

MAG, Milo van der Zee