当我尝试在下拉列表中选择一个值时,我的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");
}
答案 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函数处理它。