Мне удалось заставить код делать то, что я намеревался, но я не понимаю конкретного аспекта, почему это работает. Я запускаю Seam 2.2.2 с Richfaces 3.3.3.Richfaces и JSF/AJAX Lifecycles
Вот код со страницы Xhtml:
...
<h:form id="radiobuttontestform">
<fieldset>
<h:panelGrid columns="3">
<h:selectOneRadio layout="pageDirection" id="myRadio" value="#{actionBean.myRadioButton}">
<f:selectItem itemLabel="First" itemValue="0" />
<f:selectItem itemLabel="Second" itemValue="1" />
<a4j:support event="onclick" ajaxSingle="true" process="myDropdown" reRender="myDropdown,myCount,test" />
</h:selectOneRadio>
<h:panelGrid columns="1" border="0">
<h:selectOneListbox size="1" id="myDropdown" value="#{actionBean.rowCountPredefined}" disabled="#{actionBean.myRadioButton != '0'}">
<f:selectItem itemLabel="10" itemValue="10" />
<f:selectItem itemLabel="20" itemValue="20" />
<f:selectItem itemLabel="30" itemValue="30" />
</h:selectOneListbox>
<h:inputText id="myCount" maxlength="5" value="#{actionBean.rowCountSpecified}" disabled="#{actionBean.myRadioButton != '1'}" required="true">
<f:validateLongRange minimum="1" maximum="1000" />
<rich:ajaxValidator event="onkeyup" for="myCount" />
</h:inputText>
<rich:message id="errorMessage" for="myCount" ajaxRendered="true" showDetail="false" showSummary="true">
<f:facet name="errorMarker">ERROR:</f:facet>
</rich:message>
</h:panelGrid>
</h:panelGrid>
</fieldset>
<h:outputLabel id="test" value="RadioValue: #{actionBean.myRadioButton}" />
<a4j:commandButton id="show" value="Show Values in Log" action="#{actionBean.showValues}" />
<a4j:commandButton id="done" value="Save and end conversation" action="#{actionBean.apply}" />
</h:form>
...
Подложка боб только простой POJO с добытчиками и сеттеров для трех свойств здесь. (MyRadioButton, rowCountPredefined, rowCountSpecified)
Это то, что я получаю: (правильный результат)
radio button example http://katzekat.de/Bilder/radio2.png
radio button example http://katzekat.de/Bilder/radio.png
Вот мое мышление:
Установка ajaxSingle истинных средств что на сервере будет обработана только радиокнопка. Выпадающий список рядом с ним не нуждается в проверке - он всегда будет содержать правильное значение. Я добавил процесс = «myDropdown», чтобы сохранить значение в бэк-файле, иначе, когда я переключаю переключатель в положение 2, выпадающее меню возвращается к его исходному значению. (Я понимаю, что это только косметика!) Я проверил это с помощью отладчика, и он действительно установил свойство в бэкэнде и все работает должным образом.
Как только переключатель переключается в положение 2, значение может быть введено в текстовое поле и будет подтверждено. Это работает отлично, и когда я переключаю переключатель в положение 1, ошибка проверки очищается, если это поле находится в состоянии ошибки. Предположительно, потому что сообщение об ошибке присутствует только в области запроса.
Перезапуск отладчика снова, когда переключатель находится в позиции 2 и вводит действительное значение в текстовом поле, при обновлении в позиции 1. обновление не ожидается. Я также ожидал этого, поскольку я говорю только радио и выпадающего меню для обработки на сервере. Это бит, который я не понимаю, - значение в текстовом поле равно сохраняется на обратной стороне. (См. 2-я ссылка выше). Где это значение для этого текстового поля сохраняется, если нет в бэкэнде?
Этот вопрос может быть более полезным, если изображения не исчезли! :) – Lambart
they're back - смена хозяев :-) –
Ausgezeichnet! Я нашел ваш вопрос, исследуя проблемы жизненного цикла JSF. Думаю, вопрос/ответ мне не очень помогает, но это хорошо написанный вопрос. FWIW, я обнаружил, что эта страница солода очень полезна: http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html Возможно, вы уже ее нашли или, возможно, хорошо поняли жизненный цикл JSF, но это помогло меня много. – Lambart