防止浏览器中的缓存值

时间:2013-03-03 15:17:33

标签: jsf jsf-2 icefaces

我有selectOneMenudataTable。当我更改所选值时,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-------//
     }
}

1 个答案:

答案 0 :(得分:0)

我在itemListValueChanged中看不到你在哪里使用nestedObject.qty

除非更改,否则该组件不会重新呈现。

Icefaces中的部分提交只会更新其值已更改的组件。

您可以在selectonemenu上进行部分提交,或者您可以在itemListValueChanged中重新初始化inputText的值。