【问题标题】:Not empty list of data from backing bean is empty in jsf form来自支持 bean 的非空数据列表在 jsf 形式中为空
【发布时间】:2017-05-25 23:27:52
【问题描述】:

我有一个表单,里面有一个 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 中,但结果是一样的。我也把所有这些都放在了一种形式中,结果还是一样的。 谢谢。

【问题讨论】:

  • 把它放在一个表单中并更改按钮属性,如update="@form"
  • @Vasil Lukach 谢谢,解决了!
  • 不使用一种表单很可能不是真正的问题。更新属性中的值很可能是错误的,但是您的问题描述不是那么好...另一个答案也一样好...所以请学习如何使用/在更新属性中添加什么。了解将 id 附加到子元素的命名容器,并学习如何在其他命名容器中添加元素......宝贵的知识!!!

标签: java primefaces jsf-2


【解决方案1】:

为您的第二个表单分配一个 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>

【讨论】:

  • 请对该答案添加更多解释,因为它也是一个有效的答案,但缺乏解释为什么会这样(顺便说一句,另一个答案/评论缺少这个)
  • here 很好地解释了如何使用 id 来更新元素。
【解决方案2】:

所以,正如@Vasil Lukach 所说,这对我很有帮助:

<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="@form" id="searchButton" value="Search" actionListener="#{controler.search}"  />
  </p:fieldset>

  <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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2014-03-10
    • 2014-01-25
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    相关资源
    最近更新 更多