2009-07-20 6 views
0

Hoffentlich ist der Titel nicht zu kryptisch ...JSF Schleife rerender

Das Problem, das wir haben, ist, dass wir eine Reihe von Eingabesteuerungen (h:inputOneMenu, h:inputText usw.) von einer Java-Liste generieren.

Funktioniert gut, außer die Anforderung ist, dass diese Eingänge im laufenden Betrieb validieren. Wieder nicht so hart, außer dass da Kontrollen in einer Schleife erzeugt wurden, ist die einzig mögliche reRender-Aktion im Grunde das gesamte Formular oder ein a4j:outputPanel um jede Schleifeniteration, was im Grunde dasselbe ist.

Jetzt funktionieren die oben genannten zwei Lösungen technisch, aber sie haben den fiesen Nebeneffekt des erneuten Renderns aller Seitensteuerungen, was die Seite wirklich nervös und klobig macht. Wir möchten dies verhindern, daher ist das Steuerelement, das die Ajax-Aktualisierung/Validierung sendet, idealerweise das einzige Steuerelement, das erneut getextet wird.

Im Grunde ist dies unsere Seite Code:

<ui:repeat value="#{seam-outjected-list}" var="item"> 
    <a4j:outputPanel selfRendered="true"> 
     <h:inputText value=#{item.value}> 
     <a4j:support event="onblur" ajaxSingle="true" /> 
     </h:inputText> 
    </a4j:outputPanel> 
</ui:repeat> 

Ich habe ein bisschen Sachen weggelassen, die nur verschiedene Kontrollen in Abhängigkeit von der Position macht.

Wie Sie sehen können, verwenden wir derzeit die a4j:outputPanel-Lösung. Jedes Mal, wenn eine Schleife generierte Kontrolle aktualisiert wird, werden alle Steuerelemente neu gerendert.

Vielen Dank im Voraus, wenn jemand irgendwelche Gedanken hat.

Antwort

1

Mein erster Gedanke ist, dass Sie versuchen sollten, Ihre <ui:repeat> durch eine <a4j:repeat> zu ersetzen und nutzen Sie das Attribut ajaxKeys, um nur bestimmte Zeilen neu zu vergeben.

Vom Richfaces Docs:

Der Hauptunterschied dieser Komponente von iterativen Komponenten anderer Bibliotheken ist ein spezieller „ajaxKeys“ Attribut. Dieses Attribut definiert die Zeile Schlüssel, die nach einer Ajax Anfrage aktualisiert werden. Als Ergebnis wird es einfacher , mehrere untergeordnete Komponenten separat zu aktualisieren, ohne die gesamte Seite zu aktualisieren.