Usando o evento A4J: Support OnChange com H: Selectonemenu
Pergunta
<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()
mudará o valor de Bean1.textbox1
, Bean1.textbox2
,Bean1.textbox3
e Bean1.textbox4
(dependendo do valor selecionado (Bean1.val1)
). Às vezes, ele altera todo o valor da caixa de texto e, às vezes, altera apenas algum valor da caixa de texto.
Quando os usuários alteram o valor no controle da lista suspensa "SelectOneMenu", a estrutura JSF não chamará a fase de valores do modelo de atualização, mas ligue para o Bean1.onSelectOneMenuChange()
diretamente. Depois disso, toda a caixa de texto é reproduzida. Como a fase de valores do modelo de atualização não é chamada, os valores inseridos pelo usuário nunca são definidos o bean1 e o valor original é mostrado na caixa de texto após reRender
.
Eu quero perguntar:
Como posso chamar manualmente a fase de valores do modelo de atualização dentro
Bean1.onSelectOneMenuChange()
? Como posso obter a entrada de entrada de valor pelos usuários dentroBean1.onSelectOneMenuChange()
e defina -o para os campos correspondentes doBean1
?Outra abordagem é que apenas a caixa de texto cujos valores são atualizados dentro do bean1.Onselectonemenuchange (). No entanto, existem muitos casos. Por exemplo, um valor mudará todo o valor da caixa de texto e um valores pode alterar apenas algum valor da caixa de texto. Como posso
reRender
condicionalmente? Qual método é mais preferido para a manutenção?
Atualizar :
Para o ponto 2, acho que as precedentes de reprodução podem aceitar a expressão de EL, então tentei usar
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
Dentro do bean1.OnselectOneMenuchange (), eu defino o bean1.rerenderidlist como um conjunto de identificação que precisava ser reencipacional com base no requisito de negócios. o Bean1.getRenderIDList()
Executa quando a página estiver atualizada. No entanto, quando eu mudo o valor de <h:selectOneMenu>
Na interface do usuário, o bean1.getRenderIdList () nunca mais será executado. Assim, a caixa de texto não pode ser reRender
?
Qualquer ideia?
Solução
Seu código parece bem. Não há razão para que a fase do modelo de atualização não aconteça (você não usa immediate=true
). E se você tivesse um erro de conversa/validação, a ação nunca seria chamada. Verifique por que as fases você passa.