JSF2: Почему это окружениенеобходимо для слушателей ajax - PullRequest
1 голос
/ 17 января 2012

Вчера я пытался реализовать Listener для SelectManyListbox, используя Ajax в JSF 2.

Следующий код из моей памяти, поскольку у меня его сейчас нет: -)

<h:head>
<title>Test</title>
</h:head>

<h:body>
<h:selectManyListbox value="#{myBean.myList}">
    <f:ajax render="delete" listener="#{myBean.listener}" />
<h:selectManyListbox>
<h:commandbutton id="delete" disabled="#{myBean.disabled}" value="Delete" />
<h:body>

Я пробовал много разных вещей, потому что мой слушатель никогда не звонил.В конце я просто добавил окружающий тег <h:form>, и все заработало.Почему это так?

Моя цель - составной элемент управления, который просто отображает список и включает / отключает кнопку удаления, когда элемент выбран / не выбран.В моем понимании форма нужна только тогда, когда я хочу отправить несколько значений одновременно.

Спасибо

1 Ответ

2 голосов
/ 17 января 2012

В моем понимании форма нужна только тогда, когда я хочу отправить несколько значений одновременно.

Таким образом, это не соответствует действительности.<h:form> необходим, если вы хотите отправить запрос POST на сервер JSF с помощью компонента UIInput, такого как <h:selectManyListbox>.Это не зависит от того, выполняется ли запрос POST обычным (синхронным) запросом или аяксическим (асинхронным) запросом.Это независимо от количества входов.Не следует забывать, что скрытое поле ввода javax.faces.ViewState и, при необходимости, также имя = значение самой командной кнопки также необходимо отправлять вместе, поэтому в запросе обратной передачи JSF в принципе никогда не бывает средств для ввода одного значения ввода.

POST имеет главное преимущество перед GET в том, что нет ограничений на количество данных, которые могут быть отправлены.В GET это зависит от используемого веб-браузера и варьируется от 255 символов до 2 ~ 4 КБ в старых браузерах и 8 ~ 10 КБ в новых браузерах.В POST ограничение обычно составляет около 2 ГБ.

...