1

我有一个包含两个 AMX 页面的任务流。第一页有一个 selectOneChoice(产品列表),它是从数据控件创建的(具有 allProducts(ProductPOJO 类的 ArrayList))。

我将 allProducts 从我的 dataControl 拖放到 AMX 页面。并得到代码 -

<amx:selectOneChoice value="#{bindings.allProducts.inputValue}" label="Products" id="soc1"
                         valueChangeListener="#{pageFlowScope.lcBean.onProductChange}">
      <amx:selectItems value="#{bindings.allProducts.items}" id="si1"/>
    </amx:selectOneChoice>

并在 bean 类中设置一个方法 onProductChange(ValueChangeEvent valueChangeEvent),我从 selectOneChoice 获取选定的行并进行进一步操作。

public void onProductChange(ValueChangeEvent valueChangeEvent) {
          AmxAttributeBinding productList =
              (AmxAttributeBinding) AdfmfJavaUtilities.evaluateELExpression("#{bindings.allProducts}");

          AmxIteratorBinding amxListIterator = productList.getIteratorBinding();

          BasicIterator basicIterator = amxListIterator.getIterator();

          ProductPOJO currentProduct = (ProductPOJO) basicIterator.getDataProvider();


          System.out.println("InSide onProductChange"+currentProduct.getProduct());

          ValueExpression ve;

          ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.nupMinimumsFlag}", Integer.class);
          ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getNupMinimumsFlag());
          ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.productFlag}", Integer.class);
          ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getProductFlag());
          ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.product}", String.class);
          ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getProduct());

  }

问题是:- 当我们在 selectOneChoice 中选择一些值,然后单击提交转到下一页。然后回到第一页。selectOneChoice 的值正在重置为默认值(集合中的第一个值)。它无法缓存旧的(选定的)值。

4

1 回答 1

1

选择一个选项的工作行为在 Oracle MAF 上有所不同。它无法缓存对象。

在第一种方法中,我试图缓存一个对象。

要在 selectOneChoice 上缓存值,我们必须获取所选选项的索引并将其保存在您的数据控件类中。

我把它固定如下。

AMX 代码:-

<amx:selectOneChoice value="#{bindings.selectedProduct.inputValue}"  label="Products" id="soc1"
                         valueChangeListener="#{bindings.onProductChange.execute}" required="true"
                         showRequired="true">
      <amx:selectItems value="#{bindings.allPoroducts.items}" id="si1"/>
    </amx:selectOneChoice>

Java代码:-

    public void onProductChange() {

    System.out.println("InSide onProductChange" + selectedProduct);

    ProductPOJO currentProduct = allPoroducts.get(Integer.parseInt(selectedProduct));

    System.out.println("InSide onProductChange" + currentProduct.getProduct());

    ValueExpression ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.nupMinimumsFlag}", Integer.class);
    ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getNupMinimumsFlag());
    ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.productFlag}", Integer.class);
    ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getProductFlag());
    ve = AdfmfJavaUtilities.getValueExpression("#{pageFlowScope.product}", String.class);
    ve.setValue(AdfmfJavaUtilities.getAdfELContext(), currentProduct.getProduct());

}

where'private String selectedProduct;'是一个字符串类型的对象。因此,当我们在 selectonechoice 上选择或更改值时,它将以字符串格式返回数字,例如(0、1、2、3、4、5 基本上是索引值)。我们会将其转换为 int 并从具有该索引的产品数组中获取值。

于 2015-09-17T14:52:01.393 回答