Come ad AJAX rendere solo gli ingressi invece di tutto il modulo?
Domanda
Ho una forma in JSF 2.0 con un sacco di testo (etichette) e caselle di controllo. Il testo non si aggiorna su di presentare, ma i valori checkbox fa.
Ad esempio:
<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>
Il problema è che ogni volta che faccio un invio, l'intero contenuto del modulo è stato ri-renderizzati. Vorrei solo i valori casella di controllo per essere ri-renderizzati. Questo potrebbe risparmiare il 90% della dimensione richiesta.
C'è una soluzione buona per questo problema?
Soluzione
L'attributo render
accetta una stringa separata spazio di più ID di componente. È possibile specificare gli ID dei componenti degli ingressi desiderati nell'attributo render
anziché l'intero @form
.
La vista markup è valido (guarda come si confonde for
un'etichetta con id
ingresso), ma al punto che dovrebbe essere simile a questo:
<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>
Si noti che accetta un'espressione EL pure. Se questa è una forma generato dinamicamente e / o l'ID e il numero di caselle di controllo sono noti in anticipo nel fagiolo, allora si dovrebbe essere in grado di usare qualcosa come:
<f:ajax execute="@form" render="#{bean.allCheckboxIds}" />