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

我有一个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: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标记是在视图构建时评估的。查看更多信息。

谢谢,但状况良好。
列表
参数定义如下:
在其他情况下,它可以工作(我使用它渲染/不渲染组件)