À l'aide de a4j:support de l'événement onchange avec h:selectOneMenu

<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() permet de changer la valeur de Bean1.textbox1, Bean1.textbox2,Bean1.textbox3 et Bean1.textbox4(en fonction de la valeur sélectionnée (Bean1.val1)). Parfois, il va changer la zone de texte valeur et parfois, il ne modifie certaines zone de texte valeur.

Lorsque les utilisateurs modifient la valeur de la "selectOneMenu" dans la liste déroulante de contrôle , dans le cadre du programme-cadre ne vais pas appeler le modèle de mise à jour des valeurs de phase mais d'appeler la Bean1.onSelectOneMenuChange() directement. Après cela, l'ensemble de la zone de texte sont reRender. Parce que le modèle de mise à jour des valeurs de phase n'est pas appelée, les valeurs entrées par l'utilisateur n'est jamais réglé le la Bean1 et la valeur d'origine est indiqué dans la zone de texte après reRender.

J'ai envie de demander:

  1. Comment puis-je manuellement appeler le modèle de mise à jour des valeurs de phase à l'intérieur de Bean1.onSelectOneMenuChange()? Comment puis-je obtenir la valeur entrée par les utilisateurs à l'intérieur de Bean1.onSelectOneMenuChange() et réglez les champs correspondants de la Bean1?
  2. Une autre approche est que seuls les reRender ces textbox dont les valeurs sont mises à jour à l'intérieur de la Bean1.onSelectOneMenuChange() .Cependant , il existe de nombreux cas . Par exemple, un changement de toute la zone de texte valeur et les valeurs ne peuvent changer de certaines zone de texte valeur.Comment puis-je reRender conditionnellement? Quelle méthode est la plus préfèrent pour la maintenabilité?

Mise à jour :

Pour le point 2 , je trouve que la reRender preperties de la peut accepter l'expression EL , j'ai donc essayé d'utiliser

 <a4j:support event="onchange"  action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}"  /> .

À l'intérieur de la Bean1.onSelectOneMenuChange(), j'ai mis le Bean1.reRenderIDList à un ensemble de ID qui est requis pour être reRender basé sur les exigences de l'entreprise. Le Bean1.getRenderIDList() fonctionne que lorsque la page est d'actualisation. Cependant, lorsque je change la valeur de <h:selectOneMenu> dans l'INTERFACE utilisateur , Bean1.getRenderIDList() ne sera jamais exécuté de nouveau. Ainsi, la zone de texte ne peut pas être reRender?

Une idée?

OriginalL'auteur Ken Chan | 2010-05-12