未在JSF 2 </h:selectbooleancheckbox>中从<h:selectbooleancheckbox>触发的事件

时间:2012-03-29 15:35:18

标签: jsf

我的JSF2项目中存在一些有问题的行为。

我有一个下拉框h:selectOneMenu,可以对页面onchange = "submit();"中的刷新进行分组,从而使我的h:dataTable填充复选框h:selectBooleanCheckbox

问题是我没有从复选框中获取所有 ValueChangeEvent个事件 - 我只获得与初始下拉列表选项中的复选框一样多的事件。例如:

  • 我没有更改下拉列表值的第一种情况:
    • 页面已创建,我的初始下拉列表选项会生成3个复选框,即表格中的3行。我选中所有复选框。
    • 按下“确定”按钮后,会触发3个setNodeState个事件。
  • 第二种情况,我确实更改了下拉列表的值:
    • 页面已创建,我的初始下拉列表选项会生成3个复选框,即表格中的3行。
    • 然后我点击一个下拉列表并选择不同的东西。这会导致表格有10个校验框,因为有10个MultiFileSelectMgmtBean.fileNames。我选中所有复选框。
    • 在我按下确定后,奇怪的事情发生了:只有3 setNodeState个事件被触发,而不是10个,正如我所料。

这是xhtml代码:

<tr>
<td>
    <h:selectOneMenu 
                             value               = "#{MultiFileSelectMgmtBean.selectedLocationId}" 
                             valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}" 
                             onchange            = "submit();" 
                             styleClass          = "text" style="width: 250px;">
                <f:selectItems 
                             value = "#{MultiFileSelectMgmtBean.locationsListItems}"
                             var   = "location"
                             itemValue = "#{location}"
                             itemLabel = "#{location.label}"> 
                </f:selectItems>
            </h:selectOneMenu>
</td>
</tr>
<tr>
<td>
           <h:dataTable value="#{MultiFileSelectMgmtBean.fileNames}" var="filename">
                    <h:column>
                          <h:selectBooleanCheckbox  value               = "#{MultiFileSelectMgmtBean.fileMap[filename]}"
                                                    valueChangeListener = "#{MultiFileSelectMgmtBean.setNodeState}" 
                                                    title               = "#{filename}"
                                                    />
                          <h:outputText value="#{filename}" styleClass="text"/>
                    </h:column>
        </h:dataTable>          
</td>
</tr>

1 个答案:

答案 0 :(得分:1)

问题是支持bean的consturctor。我总是首先选择初始化下拉框。然后事件会将其更改为其他选择。

现在我将下拉状态保存为会话var。创建bean时,它首先检查是否已保存此状态,如果是,则加载它。