ValueChangeListener问题

时间:2011-05-09 09:51:41

标签: jsf

在下拉列表中根据值更改调用JSF中的ValueChangeListener时,它调用该页面上的所有ValueChangeListner。

DataTable中有两个valueChangeListener,同时在一个dropdwon中更改值,第二个也在执行。

<t:column id="avlId" styleClass="coltextcenteralign">
            <f:facet name="header">
                <h:panelGroup>
                    <h:outputText value="#{bundle['travelLocalAccommodation.title.availability']}" />
                    <h:outputText value="*" style="color:red" />
                </h:panelGroup>
            </f:facet>
            <t:selectOneMenu value="#{accomDtls.availability}" immediate="true"
                valueChangeListener="#{TravelProcessingBB.localAccommodationBB.setAvailableFlag}" forceid="true" id="avl"
                onchange="return availabilityAlert('#{accomDtls.prepopulatedFlag}','avl[#{table_count}]')"
                styleClass="dropDownStyle" style="width:50">
                <f:selectItem itemValue="Y" itemLabel="Yes" />
                <f:selectItem itemValue="N" itemLabel="No" />
            </t:selectOneMenu>
        </t:column>

                                                                                                                                                                                                                                                                        
                                                                                    

1 个答案:

答案 0 :(得分:1)

仅值更改不会自动调用valueChangeListener。您还需要提交表格。常用的“黑客”是在form.submit()事件期间使用JavaScript调用onchange。但是,这将提交整个表单。确实会为表单中所有已更改的字段触发valueChangeListener

要在JSF 1.x中修复此问题,您需要使用immediate属性稍微麻烦,以跳过所有其他表单组件进行验证并使用组件binding,以便您可以正确获取/设置其他组件的价值。长话短说,我曾写过一篇关于此的文章:populate child menus in JSF 1.2

在JSF 2.0中,借助<f:ajax>标记可以更轻松地实现这一点。如果你真的使用的是JSF 2.0(你当前的问题没有表明),那么请告诉我你是否需要一个例子。