2009-08-28 6 views
1

lorsque nous effectuons une action reRender sur une partie de la page. L'affichage de la page est correct mais pour l'affichage de la partie particulière, les actions de page restantes sont appelées deux fois et les requêtes de ces BackingBeans tirent (signifient que toutes les requêtes tirent deux fois pour afficher une partie de la page). Cela diminue les performances de l'application. Est-ce que n'importe quelle aide sur ceci comment augmenter la performance en employant reRender et comment nous pouvons faire l'exécution de requêtes moins de nombre de fois?reRender diminue les performances de l'application

Répondre

0

Votre code est-il dans les getters? JSF ne garantit pas que les getters sont appelés exactement une fois donc le code cher ne devrait pas aller dans les getters.

0

Avez-vous des actions de page Seam? Ceux-ci sont appelés (agaçants) avec chaque requête Ajax.

1

Les méthodes getter JSF ne sont pas forcément appelées une seule fois. Vous devriez faire des requêtes dans une méthode appelée depuis le constructeur pour éviter cela.

public class Test { 
    private String value; 

    public Test() { 
     this.doQuery(); 
    } 

    private void doQuery() { 
     //do query 
     this.value = "query result"; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 
0

Ceci est un bug connu. Aucune solution de contournement, sauf pour interroger les données uniquement si explicitement souhaité en définissant un booléen personnalisé (appelons-le queryData) à partir du formulaire où vous le souhaitez.

java:

public String getValue() { 
    if (queryData) { 
     return doQuery(); 
    } else { 
     return cachedValue; 
    } 
} 

xhtml:

<h:form onsubmit="this.firstChild.value=true;"> 
<h:inputHidden id="queryData" value="#{backing.queryData}"/> 
Questions connexes