【问题标题】:ValueChangeListener problemValueChangeListener 问题
【发布时间】:2012-04-24 03:43:39
【问题描述】:

当基于下拉列表中的值变化调用 JSF 中的 ValueChangeListener 时,它正在调用该页面上的所有 ValueChangeListner。

DataTable中有两个valueChangeListener,一个dropdwon中改变value,第二个也执行。

<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>


【问题讨论】:

  • 能否添加一些相关代码?

标签: jsf


【解决方案1】:

单独的值更改不会自动调用valueChangeListener。您还需要提交表格。一个常用的“hack”是在onchange 事件期间使用JavaScript 调用form.submit()。然而,这将提交 整个 表单。确实,valueChangeListener 将针对表单的所有更改字段触发。

要在 JSF 1.x 中解决这个问题,您需要使用 immediate 属性来跳过所有其他表单组件的验证和使用组件 binding 以便您可以正确获取/设置其他组件的值。长话短说,我曾经写过一篇关于这个的文章:populate child menus in JSF 1.2。

在 JSF 2.0 中,这在 &lt;f:ajax&gt; 标签的帮助下更容易实现。如果您真的在使用 JSF 2.0(您当前的问题并未表明这一点),请告诉我您是否需要示例。

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2013-05-09
    • 2011-09-16
    • 1970-01-01
    • 2014-03-30
    • 2014-04-19
    相关资源
    最近更新 更多