Hello Everyone我想在一个条件表达式中打开一个rich:popupPanel,其实我正在尝试的是这样的:
onclick="#{searchBackingBean.showLoginPanel==true ? #{rich:component('loginPopup')}.show();':''}"
但是我收到了与EL相关的错误,我应该如何正确地写这个? 非常感谢。
答案 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