0
我正在爲我的數據庫開發搜索引擎。我有一個對話框,並從該對話框中獲得一些輸入。有最多5個面板和麪板有selectOneMenus,inputTexts等。 我可以通過按+
和-
按鈕來顯示和隱藏輸入行。這不是問題。列表元素未在c:forEach中更新
問題是沒有設置AdvancedSearch的屬性。
瀏覽類有下面的對象(二傳,而getter方法是好):
private List<String> advSearchCols = new ArrayList<>();
private List<AdvancedSearch> advSearch = new ArrayList<>();
填寫AdvancedSearch類:
private String selectedColumn = "",
search = "",
logic = "",
isEqual = "";
private int widgetNum=-1;
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>
OUTPUT:
爲什麼logic
,isEqual
,search
和selectedColumn
沒有更新?爲什麼列表的元素沒有更新?
我使用Primefaces 3.5RC1。
如果我不使用process =「@ this」,commandButton中的動作沒有被觸發,也沒有提交表單。因此,我做了這個。我通過在forEach中添加h:form來解決問題。然後我編寫了提交所有表單的javascript代碼。當我點擊commandButton時,我提交了所有表單。我還能做什麼? – Viplime
如上所述,使用''和'rendered'屬性代替''和''。 –
BalusC
謝謝你的答案,我會試試:)。 – Viplime