Некоторые проблемы в моем проекте 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>