События не запускаются из <h: selectBooleanCheckbox> в JSF 2 - PullRequest
1 голос
/ 29 марта 2012

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

1 голос
/ 06 апреля 2012

Проблема заключалась в том, что бэк-константор работал.Я всегда инициализировал выпадающий список первым выбором.Тогда событие изменило бы его на какой-то другой selectin.

Теперь я сохраняю состояние выпадающего меню как сеанс var.Когда бин создается, он сначала проверяет, сохранено ли это состояние, и если да, загружает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...