在 SelectOneChoice 中禁用 selectItem

Disable selectItem in SelectOneChoice

大家好,我正在尝试使用 ADF 在 GUI 方面对我来说是全新的东西。这是我的第一次 ADF 体验,我真的不知道如何做这样的事情:

我有几个 SelectOneChoice(我们称它们为 1 到 6 的组合框)和一些 selectItems(我们称它们为选项:空白、慢速、中速、快速)

现在,我必须确保如果我在组合框 1 上选择 - 空白。所有其他人都有 4 个选项可用。

然后我将进入组合框 2 - 中。在这种情况下,从 3 到 6 的组合框不能具有 Fast 值,因为它不能比组合框 "above".

所有其他组合框也是如此,如果选择 "Slow" 那么所有组合 "below" 必须只有选项 "Slow" 或 "Blank"。

我该怎么做?

这是我尝试过的方法:

af:selectOneChoice id="soc2"
binding="#{backingBeanScope.backing_Setup.soc2}"
autoSubmit="true"                                                                                                  

    valueChangeListener="#{backingBeanScope.backing_Setup.disableLowerLevelsA}">
<af:selectItem
id="si48"
binding="#{backingBeanScope.backing_Setup.si48}"/>
<af:selectItem label="Slow"
value="slow" id="si3"                                                                                                      binding="#{backingBeanScope.backing_Setup.si3}"/>                                                                                      <af:selectItem label="Medium"                                                                                                       value="medium"                                                                                                       id="si5"                                                                                                       binding="#{backingBeanScope.backing_Setup.si5}"/>                                                                                       <af:selectItem label="Fast"                                                                                                      value="fast" id="si4"
binding="#{backingBeanScope.backing_Setup.si4}"/>
</af:selectOneChoice>
<af:selectOneChoice id="soc5"
binding="#{backingBeanScope.backing_Setup.soc5}"
partialTriggers="soc2">
<af:selectItem                                                                                                       id="si49"                                                                                                      binding="#{backingBeanScope.backing_Setup.si49}"/>                                                                                       <af:selectItem label="Slow"                                                                                                       value="slow"                                                                                                      id="si12"                                                                                                      binding="#{backingBeanScope.backing_Setup.si12}"/>                                                                                       <af:selectItem label="Medium"                                                                                                      value="medium"                                                                                                      id="si14"               

                                                                                    binding="#{backingBeanScope.backing_Setup.si14}"/>                                                                                        <af:selectItem label="Fast"                                                                                                       value="fast"                                                                                                       id="si13"                                                                                                       binding="#{backingBeanScope.backing_Setup.si13}"/>                                                                                 </af:selectOneChoice>

等等...我已将触发器和侦听器添加到相应的组合中。但是,当我更改第一个组合框(即:中等)的内容时,另一个保持所有选项可见。 我该如何解决这个问题?

在第一个 SelectOneChoice 的 valueChangeListener 中,以编程方式获取第二个 SelectOneChoice 的 Viewcriteria 并确保发送第一个 SelectOneChoice 的 ID 列 (未选择的值) 作为绑定变量. 还设置 viewcriteria 以接受此绑定变量并使用 less than or equal to 执行查询,假设 ID 是按升序排序的。

//To get VC and execute it
    ViewObjectImpl vo = getEmployeesView();
    ViewCriteria vc = vo.getViewCriteria("findEmployeeVC");
    vo.applyViewCriteria(vc);
    vo.setNamedWhereClauseParam("pEmployeeId", employeeId);
    vo.executeQuery();

不要忘记在选择第一个 SelectOneChoice 后 PPR 第二个 SelectOneChoice 以刷新 LOV。