adf selectOneChoice valueChangeListener未触发

时间:2015-02-13 23:23:18

标签: oracle-adf jdeveloper

当我尝试在下拉列表中选择一个值时,我的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");
}

2 个答案:

答案 0 :(得分:2)

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

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

如果&#34;要求&#34;返回true,valueChangeListener不会被执行。 另外,删除&#34; showRequired&#34;属性完全。不仅没有必要,而且令人困惑,因为它的条件不同于&#34; required&#34;属性。

尝试一些调试并设置required =&#34; false&#34;。您也可以删除&#34;验证器&#34;,&#34;可见&#34;,看看它是否可以正常工作,然后逐个添加它们。

答案 1 :(得分:1)

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

如果您需要捕获选择事件而不实际提交数据,则应使用clientListener并使用javascript函数处理它。