<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()
va 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 toute la valeur de la zone de texte et parfois il ne changera que la valeur de la zone de texte.En utilisant a4j: événement onchange de soutien avec h: selectOneMenu
Lorsque les utilisateurs modifient la valeur dans le contrôle de liste déroulante "selectOneMenu", l'infrastructure JSF n'appelle pas la phase de mise à jour des valeurs de modèle mais appelle directement le Bean1.onSelectOneMenuChange()
. Après cela, tous les textbox sont reRender. Étant donné que la phase de mise à jour des valeurs du modèle n'est pas appelée, les valeurs entrées par l'utilisateur ne sont jamais définies sur le Bean1 et la valeur d'origine est affichée dans la zone de texte après reRender
.
Je veux demander:
Comment puis-je appeler manuellement le modèle de mise à jour des valeurs de phase à l'intérieur
Bean1.onSelectOneMenuChange()
? Comment puis-je obtenir l'entrée de valeur entrée par les utilisateurs à l'intérieurBean1.onSelectOneMenuChange()
et le définir dans les champs correspondants duBean1
?Une autre approche est que seulement reRender ces textbox dont les valeurs sont mises à jour dans le Bean1.onSelectOneMenuChange(). Cependant, il y a beaucoup de cas. Par exemple, une valeur changera toute la valeur de la zone de texte et une valeur ne changera que la valeur de la zone de texte. Comment puis-je modifier
reRender
sous condition? Quelle méthode préfère plus pour la maintenabilité?
Mise à jour:
Pour le point 2, je trouve que les preperties rerender du peut accepter l'expression EL, alors j'ai essayé d'utiliser
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
A l'intérieur du Bean1.onSelectOneMenuChange() , Je définis le Bean1.reRenderIDList à un ensemble d'ID qui doit être reRender en fonction des besoins de l'entreprise. Le Bean1.getRenderIDList()
s'exécute lorsque la page est actualisée. Toutefois, 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?
Oui, il existe quelques qui affectent une fonction de script Java aux propriétés onblur pour effectuer une validation. Comment puis-je contourner la phase de validation pour ces événements onchange ? Je veux faire une telle validation seulement quand l'utilisateur remplit toutes les données et appuie sur le bouton soumettre. Merci! –
^^^ Pour ceux qui cherchent à limiter ce qui est envoyé, essayez de mettre l'attribut 'ajaxSingle' à' true' http://livedemo.exadel.com/richfaces-demo/richfaces/ajaxAttributes.jsf?c=ajaxattributs&tab=usage – Adam