Jsf 如何对组件执行条件更新
我有一个JSF复合组件,它只根据传递给它的属性Jsf 如何对组件执行条件更新,jsf,primefaces,composite-component,Jsf,Primefaces,Composite Component,我有一个JSF复合组件,它只根据传递给它的属性cc.attrs.list呈现一些部分。 在其中一个组件中,我希望基于属性更新一组其他组件。比如说: <p:ajax event="dialogReturn" listener="#{cc.listener}" update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/> <c:if test="#{cc.attrs.list}"> <ui:para
cc.attrs.list
呈现一些部分。
在其中一个组件中,我希望基于属性更新一组其他组件。比如说:
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/>
<c:if test="#{cc.attrs.list}">
<ui:param name="updateTable" value="#{cc.attrs.id2}_resultTable"/>
</c:if>
<c:otherwise>
<ui:param name="updateTable" value=""/>
</c:otherwise>
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{updateTable}"/>
然后像这样进行ajax更新:
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/>
<c:if test="#{cc.attrs.list}">
<ui:param name="updateTable" value="#{cc.attrs.id2}_resultTable"/>
</c:if>
<c:otherwise>
<ui:param name="updateTable" value=""/>
</c:otherwise>
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{updateTable}"/>
问题是,
#{updateTable}
变量始终是空字符串(我试图将其作为outputText的内容),我不知道为什么 这并不是一个真正的解决方案,但我已经为这个问题做了一个变通办法,这个办法很有效。我在表格周围添加了带有id的h:panelGroup
,我正在更新它,而不是表格。您可以省略ui:param
,直接在p:ajax
中进行检查:
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{cc.attrs.list ? cc.attrs.id2.concat('_resultTable') : ''}"/>
c:if
-方法的一个问题是,当您通过ajax更新此部分时,不会重新检查条件,因为JSTL标记是在视图构建时评估的。查看更多信息。谢谢,但状况良好。列表
参数定义如下:
在其他情况下,它可以工作(我使用它渲染/不渲染组件)