【问题标题】:selectoneMenu change event doesn't work with one valueselectoneMenu 更改事件不适用于一个值
【发布时间】:2013-01-18 08:37:07
【问题描述】:

我的程序中有两个下拉菜单,第二个是根据第一个中选择的值填充的。

当第一个菜单中只有一个值时,第二个菜单不会反映这些值,但当我有多个值时它会起作用。什么可能导致错误?

代码如下:

<h:selectOneMenu id="blSearchFacilityInput"
                 value="#{bLDashBoardAction.facilityId}" style="width:80px;">
    <f:ajax event="valueChange" render="blSearchzoneInput"
            listener="#{bLDashBoardAction.facValueChangeEvent}"/> 
    <f:selectItems value="#{bLDashBoardAction.svaFaciltyList}" var="c"
                   itemLabel="#{c.facCode}" itemValue="#{c.id}"/>
</h:selectOneMenu>
<h:selectOneMenu id="blSearchzoneInput" value="#{bLDashBoardAction.zoneId}"
                 style="width:80px;">
    <f:ajax event="valueChange" render="blSearchSectorInput"
            listener="#{bLDashBoardAction.zoneValueChangeEvent}"/>
    <f:selectItems value="#{bLDashBoardAction.zoneList}" var="c"
                   itemLabel="#{c.zoneCode}" itemValue="#{c.zoneId}"/>
</h:selectOneMenu>

【问题讨论】:

  • 你是否在你的 backing bean 中使用默认值初始化 #{bLDashBoardAction.facilityId}
  • 从你的问题来看,我猜你的第一个下拉菜单显示了选项,但没有分配值。由于无法将其更改为另一个值,因此永远不会触发第二个菜单的更新。会这样吗?

标签: jsf-2 selectonemenu


【解决方案1】:

如果默认情况下只有一个项目已预先选择,那么当您再次尝试选择它时实际上没有任何变化。您确实需要物理上的第二个项目才能触发更改事件。

使用null 值或noSelectionOption="true" 添加另一个项目。

<h:selectOneMenu id="blSearchFacilityInput"
                 value="#{bLDashBoardAction.facilityId}" style="width:80px;">
    <f:ajax render="blSearchzoneInput"
            listener="#{bLDashBoardAction.facValueChangeEvent}"/> 
    <f:selectItem itemLabel="--select one--" noSelectionOption="true" />
    <f:selectItems value="#{bLDashBoardAction.svaFaciltyList}" var="c"
                   itemLabel="#{c.facCode}" itemValue="#{c.id}"/>
</h:selectOneMenu>

现在您可以成功触发值更改事件。请注意,它已经是默认事件,因此为了简洁起见,我从代码中省略了它。无需重复默认设置。

如果父下拉列表中只有一项,则另一种方法是自动预填充子下拉列表。例如,在您填写 svaFacilityList 的那一刻之后:

if (svaFaciltyList.size() == 1) {
    zoneList = fillItBasedOn(svaFaciltyList.get(0));
}

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多