我有一个表单,里面有一个 p:commandButton ;当单击它时,将调用托管 bean 中的一个函数,该函数将数据收集到列表中。我需要在同一 jsf 页面上以另一种形式在对话框中打印此列表。问题是,即使我的支持 bean 中的列表不为空,但在 jsf 页面上的表单中它却为空。我究竟做错了什么?这些是形式:
<h:form>
<p:fieldset legend="Search for people" toggleable="true" toggleSpeed="500" style="width: 365px">
<p:panelGrid columns="2" >
<p:outputLabel for="confName" value="Name"/>
<p:inputText id="confName" value="#{controler.name}" />
...
</p:panelGrid>
<p:commandButton update="gstSrch" id="searchButton" value="Search" actionListener="#{controler.search}" />
</p:fieldset>
</h:form>
<h:form>
<p:repeat value="#{controler.people}" var="con" id="gstSrch" rendered="#{not empty controler.people}">
<p:panelGrid columns="4">
<h:outputText value="#{con.name}"/>
....
</p:panelGrid>
</p:repeat>
</h:form>
托管 bean 是 SessionScoped,在所有其他形式中使用时它都能正常工作。 您能友善地为我指出正确的方向吗?看起来它要么以某种方式重置,要么从未实际设置过。我尝试将 Application Scoped 放入我的托管 bean 中,但结果是相同的。我也将所有这些都放在一种形式中,但结果仍然相同。 谢谢。
最佳答案
为您的第二个表单分配一个 ID,并使用它来更新您的组件
<h:form>
<p:fieldset legend="Search for people" toggleable="true" toggleSpeed="500" style="width: 365px">
<p:panelGrid columns="2" >
<p:outputLabel for="confName" value="Name"/>
<p:inputText id="confName" value="#{controler.name}" />
...
</p:panelGrid>
<p:commandButton update=":myForm:gstSrch" id="searchButton" value="Search" actionListener="#{controler.search}" />
</p:fieldset>
</h:form>
<h:form id="myForm">
<p:repeat value="#{controler.people}" var="con" id="gstSrch" rendered="#{not empty controler.people}">
<p:panelGrid columns="4">
<h:outputText value="#{con.name}"/>
....
</p:panelGrid>
</p:repeat>
</h:form>
关于java - 来自支持 bean 的非空数据列表在 jsf 形式中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191280/