Jsf 2 c:forEach中未更新的列表元素
我正在为我的数据库开发搜索引擎。我有一个对话框,我从这个对话框中得到一些输入。最多有5个面板,面板上有SelectOne菜单、InputExt等。 我可以通过按Jsf 2 c:forEach中未更新的列表元素,jsf-2,dialog,primefaces,arraylist,foreach,Jsf 2,Dialog,Primefaces,Arraylist,Foreach,我正在为我的数据库开发搜索引擎。我有一个对话框,我从这个对话框中得到一些输入。最多有5个面板,面板上有SelectOne菜单、InputExt等。 我可以通过按+和-按钮来显示和隐藏输入行。这不是问题所在 问题是没有设置AdvancedSearch的任何属性 Browse类具有以下对象(setter和getter是OK的): Setter和getter编写正确并且advSearch初始化正确 <h:form > <p:dialog width="80
+
和-
按钮来显示和隐藏输入行。这不是问题所在
问题是没有设置AdvancedSearch的任何属性
Browse类具有以下对象(setter和getter是OK的):
Setter和getter编写正确并且advSearch
初始化正确
<h:form >
<p:dialog width="800px" height="300px" widgetVar="advSearchWg"
closable="true" draggable="true" minimizable="true" dynamic="true"
position="center" closeOnEscape="true" header="Advanced Search" onShow="L0.show()">
<c:forEach items="#{browse.advSearch}" var="adv">
<p:panel widgetVar="L#{adv.widgetNum}" visible="false" style="height: 50px;border:none;margin:0px 20px 0px 20px" closable="true">
<h:panelGrid columns="7">
<p:selectOneMenu value="#{adv.logic}" style="width: 100px;margin-left: 20px" >
<f:selectItem itemLabel="AND" itemValue="AND" />
<f:selectItem itemLabel="OR" itemValue="OR" />
</p:selectOneMenu>
<p:selectOneMenu value="#{adv.isEqual}" style="width: 100px;margin-left: 20px" >
<f:selectItem itemLabel="EQUAL" itemValue="equal" />
<f:selectItem itemLabel="NOT EQUAL" itemValue="not equal" />
</p:selectOneMenu>
<p:inputText value="#{adv.search}" required="true" autocomplete="true" style="width: 100px;margin-left: 20px"/>
<h:outputText value="in" style="margin-left: 20px" />
<p:selectOneMenu value="#{adv.selectedColumn}" style="width: 100px;margin-left: 20px" >
<f:selectItems value="#{browse.advSearchCols}" />
</p:selectOneMenu>
<c:if test="#{adv.nextWg() != (browse.advSearch.size() - 1)}">
<p:commandButton icon="ui-icon-plus" oncomplete="L#{adv.nextWg()}.show()" />
</c:if>
<c:if test="#{adv.widgetNum != 0}">
<p:commandButton icon="ui-icon-minus" oncomplete="L#{adv.widgetNum}.close()"/>
</c:if>
</h:panelGrid>
</p:panel>
</c:forEach>
<p:commandButton process="@this" async="true" action="#{browse.advSearcher()}" value="Search" style="margin-left:60px" icon="ui-icon-search" />
</p:dialog>
</h:form>
输出:
为什么logic
、isEqual
、search
和selectedColumn
没有更新?为什么列表中的元素没有更新
我在这里使用Primefaces 3.5RC1
<p:commandButton process="@this" ... />
您没有处理表单中的所有输入组件。您只处理按钮组件本身。删除该属性。它默认为@form
此外,如果我不使用process=“@this”,我建议使用
和rendered
属性,而不是
和,commandButton中的操作未激发,表单也未提交。因此,我做到了@this。我通过在forEach中添加h:form解决了这个问题。然后我编写了提交所有表单的javascript代码。当我单击commandButton时,我提交所有表单。我还能做什么?如上所述,使用
和呈现的属性,而不是
和
。谢谢你的回答。我会尝试:)。
<h:form >
<p:dialog width="800px" height="300px" widgetVar="advSearchWg"
closable="true" draggable="true" minimizable="true" dynamic="true"
position="center" closeOnEscape="true" header="Advanced Search" onShow="L0.show()">
<c:forEach items="#{browse.advSearch}" var="adv">
<p:panel widgetVar="L#{adv.widgetNum}" visible="false" style="height: 50px;border:none;margin:0px 20px 0px 20px" closable="true">
<h:panelGrid columns="7">
<p:selectOneMenu value="#{adv.logic}" style="width: 100px;margin-left: 20px" >
<f:selectItem itemLabel="AND" itemValue="AND" />
<f:selectItem itemLabel="OR" itemValue="OR" />
</p:selectOneMenu>
<p:selectOneMenu value="#{adv.isEqual}" style="width: 100px;margin-left: 20px" >
<f:selectItem itemLabel="EQUAL" itemValue="equal" />
<f:selectItem itemLabel="NOT EQUAL" itemValue="not equal" />
</p:selectOneMenu>
<p:inputText value="#{adv.search}" required="true" autocomplete="true" style="width: 100px;margin-left: 20px"/>
<h:outputText value="in" style="margin-left: 20px" />
<p:selectOneMenu value="#{adv.selectedColumn}" style="width: 100px;margin-left: 20px" >
<f:selectItems value="#{browse.advSearchCols}" />
</p:selectOneMenu>
<c:if test="#{adv.nextWg() != (browse.advSearch.size() - 1)}">
<p:commandButton icon="ui-icon-plus" oncomplete="L#{adv.nextWg()}.show()" />
</c:if>
<c:if test="#{adv.widgetNum != 0}">
<p:commandButton icon="ui-icon-minus" oncomplete="L#{adv.widgetNum}.close()"/>
</c:if>
</h:panelGrid>
</p:panel>
</c:forEach>
<p:commandButton process="@this" async="true" action="#{browse.advSearcher()}" value="Search" style="margin-left:60px" icon="ui-icon-search" />
</p:dialog>
</h:form>
<p:commandButton process="@this" ... />