Comment ajax rendre seulement les entrées au lieu de la forme entière?
Question
J'ai une forme JSF 2.0 avec beaucoup de texte (étiquettes) et des cases à cocher. Le texte ne sont mis à jour à soumettre, mais les valeurs de case à cocher fait.
Par exemple:
<h:form>
<h:outputLabel value="bla bla bla bla .. X 1000" id="lab1">
<h:selectBooleanCheckbox for="lab1">
<h:outputLabel value="bla bla bla bla .. X 1000" id="lab2">
<h:selectBooleanCheckbox for="lab2">
.... many more labels and checkboxes ...
<h:commandButton>
<f:ajax render="@form" execute="@form" />
</h:commandButton>
</h:form>
Le problème est que chaque fois que je fais soumettre, tout le contenu du formulaire est été réaffichée. Je voudrais seulement les valeurs de cases à cocher pour être réaffichée. Cela pourrait économiser 90% de la taille de la requête.
Y at-il une bonne solution pour ce problème?
La solution
L'attribut render
accepte un espace séparé chaîne d'ID multiples composants. Vous pouvez spécifier les ID composantes des entrées souhaitées dans l'attribut render
au lieu de l'ensemble @form
.
Votre balisage de vue est invalide (regarder comme vous confondre avec l'étiquette for
entrée id
), mais au point où elle devrait ressembler à ceci:
<h:outputLabel value="bla bla bla bla .. X 1000" for="lab1">
<h:selectBooleanCheckbox id="lab1">
<h:outputLabel value="bla bla bla bla .. X 1000" for="lab2">
<h:selectBooleanCheckbox id="lab2">
.... many more labels and checkboxes ...
<h:commandButton>
<f:ajax execute="@form" render="lab1 lab2 lab3 lab4 ..." />
</h:commandButton>
Notez qu'il accepte une expression EL ainsi. Si cela est une forme générée dynamiquement et / ou l'ID et le nombre de cases à cocher sont connus à l'avance dans le haricot, alors vous devriez être en mesure d'utiliser quelque chose comme:
<f:ajax execute="@form" render="#{bean.allCheckboxIds}" />