2009-04-29 5 views
1

Je travaille sur une application de couture (2.1.1.GA sous JBoss AS 4.2.2) où un particulier a un certain nombre de (parfois grandes) sections qui n'ont pas besoin d'être rendu jusqu'à ce que l'utilisateur interagisse avec cette section particulière , pensez le long des lignes d'un titre d'article où l'utilisateur clique sur le titre et il se développe pour afficher une boîte contenant le texte.Chargement paresseux des parties de pages de couture?

Je peux implémenter cela sans problème avec Seam et Richfaces mais le contenu de toutes les sections est téléchargé dans le navigateur lorsque l'utilisateur charge la page pour la première fois. Y at-il de toute façon pour ces sections (qui peuvent ou non contenir des contrôles richfaces eux-mêmes) à télécharger à la demande en utilisant ajax?

Merci.

Répondre

2

Beaucoup de façons.

Il suffit de définir rendu = "false" sur la boîte, puis reRender son conteneur parent lorsque vous cliquez sur le titre.

par ex. Où vous avez un booléen appelé showContent dans votre soutien Bean qui est basculée par la méthode toggleContent():

<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: En réponse au commentaire. Une autre façon de le faire serait d'utiliser le a4j: jsFunction (très pratique) et du javascript.

<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"/> 

Quelque chose comme ça de toute façon.

+0

Cela fonctionne, mais ne signifie le contenu doit être téléchargé à chaque bascule. C'est bien pour les sections plus petites (qui ont tendance à être celles avec des contrôles pour nous qui devraient être entièrement recréés de toute façon), mais cela peut être gênant pour les plus grandes. Idéalement, nous cherchions un moyen de télécharger ces gros morceaux de données une fois. –

+0

a4j: jsFunction vous aidera. J'ai ajouté un aperçu très approximatif de la façon dont vous pourriez le faire. – Damo

+0

Ah je vois, merci Damo je vais donner un coup de feu. –

0

Qu'en est-il si vous utilisez une table déroulante. Comment implémenter l'extraction de données dans des blocs?

Ragards Marko

Questions connexes