selectOneChoice无法将结果缓存在oracle MAF

时间:2015-07-21 11:27:03

标签: oracle-maf

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

我将所有产品从我的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的值将重置为默认值(集合中的第一个值)。它无法缓存旧的(选定的)值。

1 个答案:

答案 0 :(得分:1)

在Oracle MAF上,选择一个选项的工作行为是不同的。它无法缓存Object。

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

要在selectOneChoice上缓存值,我们必须获取所选内容的索引并将其保存在datacontrol类中。

我修好了如下。

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());

}

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