在Oracle ADF中以编程方式更改selectmany复选框列表时出错



我的jsff上有一个SelectManyChecbox,它被绑定到托管bean中的列表。

现在我的问题是,当我点击某些单选按钮时,一些复选框应该被删除,即列表应该更新为具有较少数量的复选框。

现在当我选择了10个复选框中的5个,现在当我更新列表时,复选框中只剩下2个选项…在这一点上,ADF面临的一个问题是,选择应该是有限的。

请告诉我如何在更新列表之前将复选框重置为默认/未选中状态。

或者有没有其他方法来消除这个错误

下面是我的例子,它是有效的:

<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:document title="main.jsf" id="d1">
    <af:form id="f1">
        <af:panelGroupLayout id="pgl1">
            <af:selectOneRadio label="setValues" id="sor1" autoSubmit="true"
                               valueChangeListener="#{viewScope.test.onSetValues}" value="#{viewScope.test.values}">
                <af:selectItem label="5 values" value="0" id="si2"/>
                <af:selectItem label="3 values" value="1" id="si3"/>
            </af:selectOneRadio>
            <af:selectManyChoice label="selectManyCheckBox" id="smc1" binding="#{viewScope.test.comp}">
                <f:selectItems value="#{viewScope.test.list}" id="si1"/>
            </af:selectManyChoice>
        </af:panelGroupLayout>
    </af:form>
</af:document>

public class TestBean {
private ArrayList<SelectItem> list;
private long values;
private RichSelectManyChoice comp;
public TestBean() {
    super();
    list = new ArrayList<SelectItem>();
    restoreList();
}
private void restoreList() {
    list.clear();
    list.add(new SelectItem(false, "value 1"));
    list.add(new SelectItem(false, "value 2"));
    list.add(new SelectItem(false, "value 3"));
    list.add(new SelectItem(false, "value 4"));
    list.add(new SelectItem(false, "value 5"));
}
private void cutList() {
    list.clear();
    list.add(new SelectItem(false, "value 1"));
    list.add(new SelectItem(false, "value 2"));
    list.add(new SelectItem(false, "value 3"));
}
public void setList(ArrayList<SelectItem> list) {
    this.list = list;
}
public ArrayList<SelectItem> getList() {
    return list;
}
public void onSetValues(ValueChangeEvent valueChangeEvent) {
    if ((Long)valueChangeEvent.getNewValue() == 0) 
        restoreList();
    else {            
        cutList();
    }
    comp.setValue(null);
    comp.processUpdates(FacesContext.getCurrentInstance());
    AdfFacesContext.getCurrentInstance().addPartialTarget(comp);        
}
public void setValues(long values) {
    this.values = values;
}
public long getValues() {
    return values;
}
public void setComp(RichSelectManyChoice comp) {
    this.comp = comp;
}
public RichSelectManyChoice getComp() {
    return comp;
}

最新更新