【问题标题】:ADFfaces Ignores Immediate if the required input has partialTrigger the submiting componentADFfaces Ignores Immediate if required input has partialTrigger the submiting component
【发布时间】:2011-09-17 03:59:58
【问题描述】:

我有一个带有autoSubmit=trueimmediate=trueselectOneChoice 以跳过验证,如果selectOneChoice 设置为某个值我想从 inputText 中删除所需的属性,所以inputText 将具有 partialTrigger selectOneChoice 的 id,但是当我从 selectOneChoice 更改值时(并且更改已提交),仍然仅针对需要更新的组件触发所需的验证(因为 partialTriggers 的存在)其他必需的组件不会触发其验证。
任何解决方法?

【问题讨论】:

  • 我不做ADF,所以我不能具体回答这个问题,但是你知道你可以在required属性中使用EL吗?例如。 required="#{not empty param['foo:bar']}".

标签: jsf oracle-adf rerender immediate-attribute


【解决方案1】:

您可以为您的 inputText 的 required 属性发布 EL 表达式吗?

<af:inputText label="ResId" id="it1" required="#{someValueExpression}"
                    partialTriggers="soc1">            
      </af:inputText>
      <af:selectOneChoice label="Label 1" id="soc1" autoSubmit="true">
        <af:selectItem label="test" value="test" id="si1"/>
        <af:selectItem label="test2" value="test2" id="si12"/>
      </af:selectOneChoice>

【讨论】:

    【解决方案2】:

    您需要在 valueChangeListener 中更改所需的指标。这将在模型更新之前发生。

    例如,给定这个 JSF 片段。

    <af:panelFormLayout id="pfl1">
      <af:inputText label="Label 1" id="it1" value="#{pageFlowScope.RemoveRequiredBean.myValue}" required="true" partialTriggers="soc1"/>
      <af:selectOneChoice label="Selection" value="#{pageFlowScope.RemoveRequiredBean.selection}" id="soc1" autoSubmit="true" immediate="true"
                          valueChangeListener="#{pageFlowScope.RemoveRequiredBean.selectionChange}">
        <af:selectItem label="one" value="one" id="si3"/>
        <af:selectItem label="two" value="two" id="si1"/>
        <af:selectItem label="three" value="three" id="si2"/>
      </af:selectOneChoice>
      <af:commandButton text="commandButton 1" id="cb1"/>
      <f:facet name="footer"/>
    </af:panelFormLayout>
    

    而这个监听器,你会得到你描述的行为。

    public void selectionChange(ValueChangeEvent valueChangeEvent) {
        String newValue = valueChangeEvent.getNewValue().toString();
        RichInputText it = (RichInputText)valueChangeEvent.getComponent().findComponent("it1");
        it.setRequired(!"two".equals(newValue));
    }
    

    【讨论】:

    • 未经测试,但听起来合乎逻辑。 10x
    • 是否需要使用监听器或者如果我们在输入文本中尝试 required="#{pageFlowScope.RemoveRequiredBean.selection eq 'two'}" 会发生什么?
    【解决方案3】:

    如果您想跳过验证,请在 pagedef 上将 Skip Validation 设置为 True。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-14
      • 2015-09-17
      • 2022-12-01
      • 2012-09-19
      • 2012-01-07
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      相关资源
      最近更新 更多