2009-04-29 8 views
1

Ich arbeite an einer Naht-Anwendung (2.1.1.GA unter JBoss AS 4.2.2) wo eine bestimmte hat eine Anzahl von (manchmal großen) Abschnitte, die nicht gerendert werden müssen, bis der Benutzer mit dieser bestimmten Abschnitt interagiert , denken Sie an die Zeilen eines Artikeltitels, in dem der Benutzer auf den Titel klickt und er expandiert, um eine Box mit dem Text anzuzeigen.Faule Teile der Naht Seiten laden?

Ich kann dies ohne Probleme mit Seam und Richfaces implementieren, aber die Inhalte aller Abschnitte werden in den Browser heruntergeladen, wenn der Benutzer die Seite zum ersten Mal lädt. Gibt es trotzdem, dass diese Sektionen (die selbst Richface-Controls enthalten können oder nicht) mit ajax auf Abruf heruntergeladen werden können?

Danke.

Antwort

2

Viele Möglichkeiten.

Setzen Sie gerended = "false" auf das Feld und ersetzen Sie den übergeordneten Container erneut, wenn Sie auf den Titel klicken.

z. Wo haben Sie einen boolean showContent in Ihre Begleitband Bean genannt, die von der toggleContent() -Methode umgeschaltet wird:

<a4j:commandLink 
    value="This is a title" 
    ajaxSingle="true" 
    reRender="contentDiv" 
    action="#{someBackingBean.toggleContent}"/> 

<a4j:outputPanel id="contentDiv"> 
    <a4j:outputPanel rendered="#{someBackingBean.showContent}"> 
     This is some text that is not rendered when the page loads 
    </a4j:outputPanel> 
</a4j:outputPanel> 

EDIT: Als Reaktion auf einen Kommentar. Eine andere Möglichkeit wäre, die a4j: jsFunction (sehr praktisch) und etwas Javascript zu verwenden.

<h1 onclick="toggleContent(this);">This is a title</h1> 
<a4j:outputPanel id="contentDiv"> 
    <a4j:outputPanel rendered="#{someBackingBean.showContent}"> 
     This is some text that is not rendered when the page loads 
    </a4j:outputPanel> 
</a4j:outputPanel> 

<script> 
function toggleContent(element) { 
    //check if the contentDiv has any contents (maybe check if element has a child under contentDiv) 

    //if it doesn't then call a4j:jsFunction to load the contentDiv eg. loadContent(); 

    //hide or show div depending on the current state of it 
} 
</script> 

<a4j:jsFunction name="loadContent" action="#{someBackingBean.toggleContent}" reRender="contentDiv"/> 

So etwas ist sowieso.

+0

Dies funktioniert, aber bedeutet das Content-Download bei jedem Umschalten sein muss. Dies ist in Ordnung für kleinere Abschnitte (die für uns die Regelwerke sind, die sowieso komplett neu gerendert werden müssten), kann aber für größere Teile störend sein. Idealerweise wurde nach einer Möglichkeit gesucht, diese größeren Datenblöcke einmal herunterzuladen. –

+0

a4j: jsFunction wird helfen. Ich habe einen sehr groben Überblick darüber gegeben, wie Sie es tun könnten. – Damo

+0

Ah ich sehe, danke Damo, ich gebe das eine Chance. –

0

Was ist, wenn Sie scrollbare Tabelle verwenden. Wie implementiert man das Holen von Daten in Chunks?

Ragards Marko