valueChangeListener始终不会被触发,具体取决于呈现的属性

时间:2013-12-02 17:18:03

标签: jsf managed-bean valuechangelistener

我无法理解为什么没有触发valueChangeListener。 我来到这个话题valueChangeListener Not fired when rendered/disabled attribute is added 但它没有那么多帮助。

当我的xhtml是这样的时候:

<h:inputText value="#{cm.reference}" 
                    rendered="#{cm.endDate eq null}"
                    valueChangeListener="#{userDataBean.ContactMethodChanged}" />

它正在工作(我的意思是触发了valueChangeListener

但是当我尝试这个时:

<h:inputText value="#{cm.reference}" 
                    rendered="#{cm.contactMethodId eq param.contactMethodID}"
                    valueChangeListener="#{userDataBean.ContactMethodChanged}" />

它没有。

不幸的是,我需要让第二个选项正常工作。

更多信息:
我在一个h:dataTable里面,我在一个ContactMethod(cm)列表上进行迭代 UserDataBean是applicationScoped
Apache Tomcat 7.0
JSF 2.2(Mojarra 2.2.0)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果在表单提交期间未处理输入,那么这只能表示rendered属性在处理表单提交期间未评估true,这反过来只能意味着#{cm.contactMethodId}已不兼容地更改(例如,因为它是请求范围的bean属性而不是视图范围的bean属性)和/或在表单提交期间不存在#{param.contactMethodID}

如果bean位于作业的正确范围内(否则原始的rendered方法可能也没有用),然后在负责提交的命令按钮/链接中保留请求参数,如下所示表格应该这样做:

<h:commandButton ...>
    <f:param name="contactMethodID" value="#{param.contactMethodID}" />
</h:commandButton>