Pourquoi est-BackingBean méthode appelée plusieurs fois lors de la demande de facelet?

Je suis d'apprentissage et de travail sur JSF + Facelets ces jours-ci. J'ai un BackingBean et une Facelet page xHTML. Lorsque je demande à la facelet-page (une seule fois) le backing-bean-méthode est appelée plusieurs fois.

Quelle pourrait être la raison pour cela?

Je ne peux pas voir quelque chose de spécial. Merci à l'avance.

Ici est la facelet:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<ui:composition template="index.xhtml">
<ui:define name="content">
<h:form>Name: <h:inputText id="nameFilterPattern" value="#{kundenBackingBean.nameFilterPattern}" /><h:commandButton value="Suchen"/></h:form>
<h:dataTable var="kunde" value="#{kundenBackingBean.kunden}" rowClasses="rowHighlight, rowOrdinary">
<h:column> 
<f:facet name="header">
<h:outputText value="Kundennr" />
</f:facet>
<h:outputText value="#{kunde.kundenNr}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{kunde.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Vorname" />
</f:facet>
<h:outputText value="#{kunde.vorname}"/>
</h:column>
<h:column>
<h:outputLink>Details</h:outputLink>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</body>
</html>

Et voici le backing-bean. La méthode getKunden est appelé plusieurs fois:

@ManagedBean
@SessionScoped
public class KundenBackingBean extends AbstractBackingBean {
private String nameFilterPattern;
public List<Kunde> getKunden(){
System.out.println("getKunden");
return getApplication().getKunden(getNameFilterPattern());
}
public String getNameFilterPattern() {
return nameFilterPattern;
}
public void setNameFilterPattern(String nameFilterPattern) {
System.out.println("Name filter: " + nameFilterPattern);
this.nameFilterPattern = nameFilterPattern;
}
}
est-il toujours appelé le même nombre de fois?
utilisez-vous votre IDE mode debug pour vérifier que les méthodes appelées plusieurs fois, ou vous voyez dans les journaux?
Il semble que lors de la première demande, il est appelé 8 fois et après qu'elle est appelée à 21 reprises. J'utilise eclipse + glassfish et qu'il a commencé en mode de débogage. J'ai simplement inséré un sysout dans la méthode et compté les sorties de la console.

OriginalL'auteur c0d3x | 2010-02-16