我有两个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的值将重置为默认值(集合中的第一个值)。它无法缓存旧的(选定的)值。
答案 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,并从该索引获取产品数组的值。