我有一个JSF复合组件,它只根据传递给它的属性cc.attrs.list
呈现一些部分。
在其中一个组件中,我想根据属性更新一组其他组件。所以像这样:
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{cc.attrs.id2}_resultTable"/>
问题是resultTable没有一直呈现,当resultTable不存在时,我得到一个异常Cannot find component with expression "id_resultTable"
,这并不奇怪。所以我的想法是创建一个变量,它将包含属性的id或空字符串,如下所示:
<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>
然后像这样执行ajax更新:
<p:ajax event="dialogReturn" listener="#{cc.listener}"
update="#{cc.attrs.id2}_input #{updateTable}"/>
问题是,#{updateTable}
变量总是一个空字符串(我试图把它作为outputText的内容),我不知道为什么。
答案 0 :(得分:1)
您可以省略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标记。有关详细信息,请查看JSTL in JSF2 Facelets... makes sense?。
答案 1 :(得分:0)
这不是一个真正的解决方案,但我已经针对可行的问题做了一个解决方法。我在表格周围添加了h:panelGroup
ID,我正在更新此而不是表格。