【问题标题】:adf selectOneChoice valueChangeListener not firingadf selectOneChoice valueChangeListener 未触发
【发布时间】:2015-02-13 23:23:18
【问题描述】:

当我尝试在下拉列表中选择一个值时,我的 SelectOneChoice 的 valueChangeListener 没有被调用。只有当我单击下拉列表中的空白项(我们在 ListOfValues 中配置)时才会调用它。 在一些研究中,我了解到在您的 valueChangeListener 中,我们必须添加

vce.getComponent().processUpdates(FacesContext.getCurrentInstance());

作为我们的第一行。但是它仍然没有在选择除 null 之外的任何其他值时被调用。

我的 SelectOneChoice 的代码

<af:selectOneChoice value="#{bindings.Prefix.inputValue}"
                    label="#{bindings.Prefix.label}"
                    shortDesc="#{bindings.Prefix.hints.tooltip}"
                    id="soc3"
                    partialTriggers="formatIdId"
                    visible="#{bindings.Prefix.hints.visible}"
                    binding="#{backingBeanScope.CreateItemBackingBean.prefixField}"
                    required="#{bindings.ItemNumberType.attributeValue eq 'VPLU'}"
                    showRequired="#{bindings.Prefix.hints.mandatory}"
                      validator="#{backingBeanScope.CreateItemBackingBean.onValidatePrefix}"
                      autoSubmit="true"
                     valueChangeListener="#{backingBeanScope.CreateItemBackingBean.onChangePrefix}">
    <f:selectItems value="#{bindings.Prefix.items}" id="si3"/>
    <af:convertNumber groupingUsed="false"
                        pattern="#{bindings.Prefix.format}"/>
</af:selectOneChoice>   

我的 ValueChangeListener 的代码

    public void onChangePrefix(ValueChangeEvent vce) {
         vce.getComponent().processUpdates(FacesContext.getCurrentInstance());
         System.out.println("vce.getOldValue()"+vce.getOldValue());
        System.out.println("vce.getNewValue()"+vce.getNewValue());
        System.out.println("I am in changed prefix");
}

【问题讨论】:

    标签: oracle-adf jdeveloper


    【解决方案1】:

    valueChangeListener 只会在您提交表单时触发。您可以对其使用任何提交操作,或者只打开组件上的autosubmit 属性。

    如果您需要在不实际提交数据的情况下捕获选择事件,则应使用clientListener 并使用javascript函数进行处理。

    【讨论】:

    • 我在我的领域使用autoSubmit=true。我正在我的 SelectOneChoice 中进行选择,但我仍然没有看到我的 valueChangeListener 被调用。
    • @SoumyaR 即使你点击了场外的某个地方?
    • 找到了问题,阅读上面的 cmets。感谢您的帮助
    • 我遇到了完全相同的问题,并且以某种方式设置 autoSubmit="true" 解决了我的问题。很奇怪。可能它与我表单上的其他标签有关......我只是没有看到问题的根本原因......无论如何......感谢所有回答并发布此帖子的人。
    【解决方案2】:

    这可能是您阻止 valueChangeListener 触发的必需标记。

    required="#{bindings.ItemNumberType.attributeValue eq 'VPLU'}"
    

    如果 "required" 返回 true,则不会执行 valueChangeListener。 另外,完全删除“showRequired”属性。不仅没有必要,而且令人困惑,因为它具有与“必需”属性不同的条件。

    尝试调试一下,设置required="false"。也可以去掉“validator”、“visible”,看看没有它们能不能用,然后一个一个加回来。

    【讨论】:

    • 感谢您的回复,虽然所需的标签不是罪魁祸首,但我尝试删除每个标签以查找问题。是 Validator 标签使用 setValueToEL 更新模型,因此 valueChangeListener 没有触发。
    • 我遇到了同样的问题,尽管 required="true" 是必要的。通过添加标签 autoSubmit="true" 解决了问题。
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2011-11-03
    • 2014-09-17
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多