<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()
modifiera la valeur de Bean1.textbox1
, Bean1.textbox2
, Bean1.textbox3
y Bean1.textbox4
(en fonction de la valeur choisie (Bean1.val1)
). Parfois, il modifie toutes les valeurs de la zone de texte et parfois il ne modifie que certaines valeurs de la zone de texte.
Lorsque les utilisateurs modifient la valeur du contrôle de liste déroulante "selectOneMenu", le cadre JSF n'appelle pas la phase de mise à jour des valeurs du modèle, mais la phase de mise à jour des valeurs de la liste déroulante "selectOneMenu". Bean1.onSelectOneMenuChange()
directement. Ensuite, toutes les zones de texte sont redessinées. Comme la phase de mise à jour des valeurs du modèle n'est pas appelée, les valeurs saisies par l'utilisateur ne sont jamais définies dans le Bean1 et la valeur originale est affichée dans la boîte de texte après la phase de mise à jour des valeurs du modèle. reRender
.
J'ai envie de demander :
-
Comment puis-je appeler manuellement la phase de mise à jour des valeurs du modèle à l'intérieur de l'application ?
Bean1.onSelectOneMenuChange()
? Comment puis-je obtenir la valeur saisie par les utilisateurs à l'intérieur de l'application ?Bean1.onSelectOneMenuChange()
et lui attribuer les champs correspondants duBean1
? -
Une autre approche consiste à ne re-rendre que les zones de texte dont les valeurs sont mises à jour dans le Bean1.onSelectOneMenuChange(). Par exemple, une valeur changera toutes les valeurs de la boîte de texte et une valeur ne changera que certaines valeurs de la boîte de texte.
reRender
sous conditions ? Quelle méthode est préférable pour la maintenabilité ?
Mise à jour :
Pour le point 2, je trouve que les propriétés de reRender peuvent accepter l'expression EL, j'ai donc essayé d'utiliser
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
Dans le Bean1.onSelectOneMenuChange(), j'ai défini le Bean1.reRenderIDList à un ensemble d'ID qui doivent être re-rendus en fonction de l'exigence de l'entreprise. La liste de Bean1.reRenderIDList Bean1.getRenderIDList()
s'exécute lorsque la page est rafraîchie. Cependant, lorsque je modifie la valeur de <h:selectOneMenu>
dans l'interface utilisateur, Bean1.getRenderIDList() ne sera plus jamais exécuté. Ainsi, la zone de texte ne peut pas être reRender
?
Une idée ?