<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)
). Иногда он изменяет все значения текстового поля, а иногда только некоторые значения текстового поля.
Когда пользователи изменяют значение в элементе управления раскрывающегося списка «selectOneMenu», среда JSF не будет вызывать фазу обновления значений модели, а будет вызывать Bean1.onSelectOneMenuChange()
напрямую. После этого все текстовые поля переопределяются. Поскольку фаза обновления значений модели не вызывается, значения, введенные пользователем, никогда не устанавливают Bean1, и исходное значение отображается в текстовом поле после reRender
.
Я хочу спросить:
Как вручную вызвать фазу обновления значений модели внутри Bean1.onSelectOneMenuChange()
? Как я могу получить значение, введенное пользователями внутри Bean1.onSelectOneMenuChange()
и установить его в соответствующие поля Bean1
?
Другой подход заключается в том, что только повторная визуализация тех текстовых полей, значения которых обновляются внутри Bean1.onSelectOneMenuChange (). Однако, есть много случаев. Например, значение изменит все значение текстового поля, а значения могут изменить только некоторое значение текстового поля. Как я могу reRender
условно? Какой метод больше подходит для ремонтопригодности?
Обновление:
Что касается пункта 2, я обнаружил, что свойства reRender могут принимать выражение EL, поэтому я попытался использовать
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
Внутри Bean1.onSelectOneMenuChange () я установил для Bean1.reRenderIDList набор идентификаторов, который требуется для повторной отправки в соответствии с требованиями бизнеса. Bean1.getRenderIDList()
запускается при обновлении страницы. Однако, когда я изменяю значение <h:selectOneMenu>
в пользовательском интерфейсе, Bean1.getRenderIDList () никогда не будет запускаться снова. Таким образом, текстовое поле не может быть reRender
?
Есть идеи?