Java 无法设置所需的selectOneChoice

Java 无法设置所需的selectOneChoice,java,oracle-adf,Java,Oracle Adf,在我的片段中我有 <af:selectOneChoice value="#{pageFlowScope.loanPurposeBean.loanPurpose.levelPurpose}" contentStyle="width:150px" autoSubmit="true" readOnly="#{pageFlowScope.loanPurposeBean.activity=='edit'}" required="true" labe

在我的片段中我有

<af:selectOneChoice value="#{pageFlowScope.loanPurposeBean.loanPurpose.levelPurpose}" contentStyle="width:150px"
    autoSubmit="true" readOnly="#{pageFlowScope.loanPurposeBean.activity=='edit'}"
                      required="true" label="Cấp mục đích vay" id="soc1"
                      valueChangeListener="#{pageFlowScope.loanPurposeBean.valueChangeLevel}">
    <af:selectItem label="1" value="1" id="si10"/>
    <af:selectItem label="2" value="2" id="si5"/>
    <af:selectItem label="3" value="3" id="si6"/>
    <af:selectItem label="4" value="4" id="si3"/>
    <af:selectItem label="5" value="5" id="si9"/>
    <af:selectItem label="6" value="6" id="si8"/>
    <af:selectItem label="7" value="7" id="si4"/>
    <af:selectItem label="8" value="8" id="si1"/>
    <af:selectItem label="9" value="9" id="si2"/>
    <af:selectItem label="10" value="10" id="si7"/>
  </af:selectOneChoice>

  <af:selectOneChoice value="#{pageFlowScope.loanPurposeBean.loanPurpose.loanPurposeParent}"
                      immediate="true"
                      binding="#{pageFlowScope.loanPurposeBean.socLoanPurposeParent}" contentStyle="width:150px"
                       partialTriggers="soc1" readOnly="#{pageFlowScope.loanPurposeBean.activity=='edit'}"
                      label="Mã cha mục đích vay" id="soc2">
    <f:selectItems value="#{pageFlowScope.loanPurposeBean.loanPurposeByLevel}"
                   id="si12"/>
  </af:selectOneChoice>
如果我选择值大于1的级别,我会将required设置为true,然后选择值为1的级别并将required设置为false,但我仍然会从selectonechoice soc2获得验证,请执行以下操作
this.getsoc2.setRequiredtrue

问题是您正在服务器端进行验证。它应该通过javascript在客户端本身进行处理。您可以很容易地找到javascrip代码来实现同样的功能。除非你有非常具体的理由,否则你应该只在客户端做。我对oracle adf不太了解,因此我的建议可能与您无关。
public void valueChangeLevel(ValueChangeEvent valueChangeEvent) {
    level = (Integer)valueChangeEvent.getNewValue();
    System.out.println("New value level: " + level);
    if (level > 1) {
        socLoanPurposeParent.setDisabled(false);
        socLoanPurposeParent.setRequired(true);
    } else {
        socLoanPurposeParent.setDisabled(true);
        socLoanPurposeParent.setValue("");
    }
    if (level > 0) {
        level = level - 1;
    }
    RequestContext.getCurrentInstance().addPartialTarget(socLoanPurposeParent);

}