0

我有一个selectOneMenu和一个dataTable。当我更改所选值时,dataTable将重新填充。的一列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 中的 Partial Submit 只会更新值发生变化的组件。

您可以在 selectonemenu 上将 Partial Submit 设置为 false,也可以重新初始化 itemListValueChanged 中的 inputText 的值。

于 2013-03-03T17:03:02.190 回答