0

データベース用の検索エンジンを開発しています。ダイアログがあり、このダイアログからいくつかの入力を取得します。最大 5 つのパネルがあり、パネルには selectOneMenus、inputTexts などがあります。入力行を表示および非表示にするには、 ボタン+-ボタンを押します。これは問題ではありません。

問題は、AdvancedSearch のプロパティが設定されていないことです。

Browse クラスには以下のオブジェクトがあります (セッターとゲッターは問題ありません)。

private List<String> advSearchCols = new ArrayList<>();
private List<AdvancedSearch> advSearch = new ArrayList<>();

高度な検索クラス:

private String selectedColumn = "",
        search = "",
        logic = "",
        isEqual = "";

private int widgetNum=-1;

セッターとゲッターは適切に記述され、適切に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>

出力:

ここに画像の説明を入力

logicisEqualsearchおよびselectedColumnが更新されないのはなぜですか? リストの要素が更新されないのはなぜですか?

私は Primefaces 3.5RC1 を使用しています。

4

1 に答える 1

1

ここ、

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

フォーム内のすべての入力コンポーネントを処理しているわけではありません。ボタンコンポーネント自体のみを処理しています。その属性を削除します。デフォルトは@formすでにです。

さらに、 andの代わりに<ui:repeat>andrendered属性を使用することをお勧めします。<c:forEach><c:if>

于 2013-02-05T12:24:24.773 に答える