<h:selectOneMenu id="selectOneMenu" value="#{Bean1.val1}" >
<f:selectItems value="#{Bean1.selectItems}"/>
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="textbox1 , textbox2 , textbox3, textbox4" />
</h:selectOneMenu>
<h:inputText id="textbox1" value="#{Bean1.textbox1}"> </h:inputText>
<h:inputText id="textbox2" value="#{Bean1.textbox2}"> </h:inputText>
<h:inputText id="textbox3" value="#{Bean1.textbox3}"> </h:inputText>
<h:inputText id="textbox4" value="#{Bean1.textbox4}"> </h:inputText>
Bean1.onSelectOneMenuChange()
изменит значение из Bean1.textbox1
, Bean1.textbox2
, Bean1.textbox3
и Bean1.textbox4
(в зависимости от значения, выбранного (Bean1.val1)
). Иногда это изменяет все значения текстового поля, и иногда это изменяет только значение текстового поля.Использование a4j: OnChange событие Support с ч: selectOneMenu
Когда пользователи меняют значение в выпадающем списке «selectOneMenu», структура JSF не вызывает фазу значений модели обновления, но напрямую вызывает Bean1.onSelectOneMenuChange()
. После этого все текстовое поле reRender. Поскольку фаза значений модели обновления не вызывается, значения, введенные пользователем, никогда не устанавливаются в Bean1, а исходное значение отображается в текстовом поле после reRender
.
Я хочу спросить:
Как можно вручную вызвать модель обновления значений фазы внутри
Bean1.onSelectOneMenuChange()
? Как я могу получить ввод значений вводами пользователей внутриBean1.onSelectOneMenuChange()
и установить его в соответствующие поляBean1
?Другой подход заключается в том, что только переписывать те текстовые поля, значения которых обновляются внутри Bean1.onSelectOneMenuChange(). Однако существует много случаев. Например, значение изменит все значения текстового поля, и значения могут изменить только некоторое значение текстового поля. Как я могу определить
reRender
? Какой метод больше предпочитает ремонтопригодность?
Обновление:
Для точки 2, я считаю, что засавить preperties из может принимать выражение EL, поэтому я попытался использовать
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
Внутри Bean1.onSelectOneMenuChange() , Я установил Bean1.reRenderIDList на набор ID, который должен быть reRender на основе бизнес-требований. Bean1.getRenderIDList()
запускается при обновлении страницы. Однако, когда я изменяю значение <h:selectOneMenu>
в пользовательском интерфейсе, Bean1.getRenderIDList() больше не будет запускаться. Таким образом, текстовое поле не может быть reRender
?
Любая идея?
Да, есть некоторые, которые назначают функцию java-скрипта свойствам onblur, чтобы выполнить некоторую проверку. Как я могу обходить фазу проверки для тех событий onchange? Я хочу сделать такую проверку только тогда, когда пользователь заполнит все данные и нажмите кнопку отправки. Спасибо! –
^^^ для тех, кто хочет ограничить отправку, попробуйте установить атрибут 'ajaxSingle' в' true' http://livedemo.exadel.com/richfaces-demo/richfaces/ajaxAttributes.jsf?c=ajaxattributes&tab=usage – Adam