所以我找到了一些接近这个的答案,我已经找到了足够的答案来解决我遇到的问题。但即便如此,我还是很想了解这方面的工作原理。让我用一个例子来说明:
我有一个.xhtml
看起来像这样(缩短)的 facelet 页面。
<h:form id="resultForm">
<h:panelGroup class="search_form" layout="block">
<h:inputText id="lastname" value="#{search.lastname}"/>
<h:commandButton action="#{search.find}" value="Find">
<f:ajax execute="lastname" render="resultDisplay"/>
</h:commandButton>
</h:panelGroup>
<h:dataTable value="#{search.searchResults}" var="results" id="resultDisplay"
rendered="#{!empty search.searchResults}">
<h:column>
#{results.field}
</h:column>
</h:dataTable>
</h:form>
现在,为了简洁起见,我不会发布所有的支持 bean 代码,但我有这样的东西:
public void find() {
searchResults = setResults(true);
}
searchResults
一个在哪里ArrayList<Objects>
。搜索后,它不为空 - 在多个测试中检查(可以为空,但不是在我正在做的测试中)。
现在。这不起作用。
但是,如果我将dataTable
另一个嵌套在里面,比如说panelGroup
,它会起作用。
<h:panelGroup id="resultDisplay">
<h:dataTable value="#{search.searchResults}" var="results"
rendered="#{!empty search.searchResults}">
<h:column>
#{results.field}
</h:column>
</h:dataTable>
</h:panelGroup>
现在,这种变化可以让一切正常工作。我可以接受这个......但我想我也在寻求一些理解。关于为什么我必须嵌套这些组件的任何见解?我肯定错过了一些东西!