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:

  1. 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 dentro Bean1.onSelectOneMenuChange() e defina -o para os campos correspondentes do Bean1?

  2. 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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top