0

私はselectOneMenuとを持っていdataTableます。選択した値を変更すると、dataTable再入力されます。の列の 1 つはdataTableですinputText。問題は、inputTextフィールドが を呼び出さずgetter、前の値をキャッシュすることです。

getter強制的に呼び出すか、inputTextキャッシュしないように設定したい。この問題を解決するにはどうすればよいですか?

 <h:body>
     <f:view>
         <h:form id="headForm">

            <ice:selectOneMenu id="item"
                    value="#{outerBean.selectedItem}"
                    valueChangeListener="#{outerBean.itemListValueChanged}"
                    style="width: 158px;" required="true"
                    label="Supplier Id" partialSubmit="true">
                    <f:selectItems value="#{outerBean.itemList}" />
            </ice:selectOneMenu>

            <ice:dataTable id="pdet" value="#{outerBean.nestedClassList}" var="nestedObject" rendered="true">

                <ice:column>
                <f:facet name="header">Order Number</f:facet>
                    <ice:outputText value="#{nestedObject.orderNumber}" />
                </ice:column>

                <ice:column>
                <f:facet name="header">Qty</f:facet>
                    <ice:inputText value="#{nestedObject.qty}" id="qty" label="'Qty' FOR 'Order Number':#{nestedObject.orderNumber} "
                                   partialSubmit="true" 
                                   valueChangeListener="#{nestedObject.qtyChanged}"
                                   validator="#{nestedObject.validateQty}">
                    </ice:inputText>
                 </ice:column>
            </ice:dataTable>
       </h:form>
   </h:view>

public class OuterBean{

    private List<String> itemList = new ArrayList<String>();
    private String selectedItem;

    private List<NestedClass> nestedClassList = new ArrayList<NestedClass>();

    public OuterBean(){
         //init values
    }

    public void itemListValueChanged(ValueChangeEvent e){
         selectedItem = (String)e.getNewValue();

         //reset the dataTable record list
         nestedClassList = getRandomRecords();
    }

    //---getters-setters-----//

    private class NestedClass{

         private int orderNumber;
         private int qty;

         NestedClass(){
             orderNumber = generateOrderNumber();
             qty = getRandomQty();
         }

         //-----qtyChangedListener----//
         //-----qtyValidator----------//
         //-----getters-setters-------//
     }
}
4

1 に答える 1

0

itemListValueChangedでnestedObject.qtyをチェーンしている場所がわかりません

コンポーネントは、変更されない限り再レンダリングされません。

Icefaces の部分送信は、値が変更されたコンポーネントのみを更新します。

selectonemenu で Partial Submit を false にするか、itemListValueChanged で inputText の値を再初期化できます。

于 2013-03-03T17:03:02.190 に答える