2013-02-05 56 views
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:

enter image description here

爲什麼logicisEqualsearchselectedColumn沒有更新?爲什麼列表的元素沒有更新?

我使用Primefaces 3.5RC1。

回答

1

這裏,

<p:commandButton process="@this" ... /> 

你不處理表單中的所有輸入組件。你只處理按鈕組件本身。刪除該屬性。它已經默認爲@form

此外,我建議使用<ui:repeat>rendered屬性,而不是<c:forEach><c:if>

+0

如果我不使用process =「@ this」,commandButton中的動作沒有被觸發,也沒有提交表單。因此,我做了這個。我通過在forEach中添加h:form來解決問題。然後我編寫了提交所有表單的javascript代碼。當我點擊commandButton時,我提交了所有表單。我還能做什麼? – Viplime

+0

如上所述,使用''和'rendered'屬性代替''和''。 – BalusC

+0

謝謝你的答案,我會試試:)。 – Viplime