无法从ADF / JDeveloper中的辅助bean访问复选框值

时间:2014-11-21 18:57:00

标签: oracle-adf

ADF和JDeveloper都是新手。也是第一次在Stack Exchange上发帖。

商业案例:

我想从数据库中获取一些数据,显示为只有叶子(最低级别节点)的复选框的树。 然后,我希望用户能够检查任意复选框,单击提交按钮,然后让应用程序对托管bean中的数据(特别是选中的复选框)执行各种操作。数据不需要保存回数据库,只能以编程方式进行操作。

我采取的步骤:

我已经设置了与数据库绑定的实体对象,创建了View Objects并将它们添加到了Application Module。然后,我将名为Selected的布尔瞬态属性添加到最低级别的视图对象,将Updatable设置为Always。我创建了Facelets页面并进行拖放以创建一个像我想要的那样显示的树。

我从Data Control创建了另一个与Selected属性的绑定,并在nodeStamp facet下的outputText之后创建了一个selectBooleanCheckbox。然后我调整了渲染的属性,因此它只会渲染最低级别的节点。

到目前为止一切顺利。树显示并且看起来很棒。

然后我创建了一个commandButton,并在名为TreeTest的请求范围的托管bean中创建了一个绑定到名为submitTree的方法的操作。我的Facelet页面的表单组件现在看起来像这样:

<af:form id="f1"> <af:commandButton text="Submit" id="cb2" action="#{TreeTestBean.submitTree}" /> <af:tree summary="A generic summary." id="t1" value="#{bindings.TopLevelVO.treeModel}" var="node" rowSelection="none" selectionListener="#{bindings.TopLevelVO.treeModel.makeCurrent}"> <f:facet name="nodeStamp"> <af:group id="g1"> <af:selectBooleanCheckbox value="#{node.Selected}" id="sbc1" rendered="#{node.AccessDisplayName != null ? true : false}" /> <af:outputText value="#{node}" id="ot1"/> </af:group> </f:facet> </af:tree> </af:form>

我现在在绑定上使用迭代器方法,并编辑了我的支持bean代码,如下所示:

public class TreeTestBean {

public void submitTree(){
    BindingContainer bindings = ADFUtils.getBindingContainer();
    DCIteratorBinding dcIteratorBinding = (DCIteratorBinding) bindings.get("TopLevelVOIterator");
    TopLevelVOImpl topLevelVO = (TopLevelVOImpl) dcIteratorBinding.getViewObject();
    RowSetIterator rowSetIterator = topLevelVO.createRowSetIterator(null);

    while (rowSetIterator.hasNext()){
        TopLevelVORowImpl applicationVORow = (TopLevelVORowImpl) rowSetIterator.next();
        ViewRowSetImpl secondLevelRowSet = (ViewRowSetImpl) topLevelVORow.getsecondLevelVO();
        while (secondLevelRowSet.hasNext()){
            SecondLevelVORowImpl secondLevelVORow = (SecondLevelVORowImpl) secondLevelRowSet.next();
            ViewRowSetImpl bottomLevelRowSetImpl = (ViewRowSetImpl) secondLevelpVORow.getBottomLevelVO();
            while (bottomLevelRowSetImpl.hasNext()){
                BottomLevelVORowImpl bottomLevelVORow = (BottomLevelVORowImpl) bottomLevelRowSetImpl.next();
                logger.info(bottomLevelVORow.getBottomLevelName() + " selected: " + bottomLevelVORow.getSelected());
        }
    }
}
rowSetIterator.closeRowSetIterator();
}

所以,似乎我正在迭代树。 getBottomLevelName正确打印出我想要的值。复选框从null开始。当我检查其中的一些时,我检查的那些将显示为假(并且检查被清除)。所有其余的都保持无效。我觉得在范围和/或生命周期中有一些我误解的东西。

0 个答案:

没有答案