【问题标题】:Prevent cache values in the browser防止在浏览器中缓存值
【发布时间】:2026-01-30 20:20:03
【问题描述】:

我有一个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-------//
     }
}

【问题讨论】:

  • 更多说明请向我们展示代码的 sn-ps

标签: jsf jsf-2 icefaces


【解决方案1】:

我没有看到您在 itemListValueChanged 中链接nestedObject.qty 的位置

组件不会重新渲染,除非它被改变。

Icefaces 中的部分提交只会更新值发生变化的组件。

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

【讨论】:

  • 我正在添加nestedObjects 的列表。所以每个nestedObject 都有一个名为qty 的属性。所以这是一个新值。
  • 你能监控请求receive-updated-views,它将被Icefaces调用来更新监控。您使用的是哪个版本的 icefaces?