Wie kann man nur die Eingaben anstelle der gesamten Form rendern?
Frage
Ich habe ein Formular in JSF 2.0 mit vielen Text (Beschriftungen) und Kontrollkästchen. Der Text wird beim Senden nie aktualisiert, aber die Kontrollkästchen -Werte.
Zum Beispiel:
<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>
Das Problem ist, dass immer dann der gesamte Formularinhalt eingereicht wird, wenn ich eingereicht habe. Ich möchte nur, dass nur die Kontrollkästchen-Werte neu geführt werden. Dies könnte 90% der Anforderungsgröße sparen.
Gibt es eine gute Lösung für dieses Problem?
Lösung
Das render
Das Attribut akzeptiert eine von Speicherplatz getrennte Zeichenfolge mehrerer Komponenten -IDs. Sie können die Komponenten -IDs der gewünschten Eingänge in der angeben render
Attribut anstelle des Ganzen @form
.
Ihre Ansichtsmarkup ist ungültig (sehen Sie aus, als ob Sie verwirrtes Etikett sind for
mit Eingabe id
), aber bis zu dem Punkt sollte es so aussehen:
<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>
Beachten Sie, dass es auch einen EL -Ausdruck akzeptiert. Wenn dies ein dynamisch generiertes Formular ist und/oder die ID und Anzahl der Kontrollkästchen im Voraus in der Bohne bekannt sind, sollten Sie in der Lage sein, etwas wie zu verwenden:
<f:ajax execute="@form" render="#{bean.allCheckboxIds}" />