2010-11-20 22 views
1

J'ai le composant composite Java Server Faces 2.0 suivant. Remarquez que je suis en utilisant in extensoComment reconnaître les composants composites Java Server Faces 2.0 lors de l'utilisation d'ajax?

resources/customer/customer.xhtml 

<composite:interface> 
    <composite:attribute name="id" required="false"/> 
    <composite:attribute name="firstName" required="false"/> 
    <composite:attribute name="lastName" required="false"/> 
    <composite:attribute name="age" required="false"/> 
    <composite:attribute name="rendered" required="false"/> 
</composite:interface> 
<composite:implementation> 
    <f:verbatim id="#{cc.attrs.id}" rendered="#{cc.attrs.rendered}"> 
     <div> 
      <div> 
       <p>First name</p> 
       <h:outputText value="#{cc.attrs.firstName}"/> 
      </div> 
      <div> 
       <p>Last name</p> 
       <h:outputText value="#{cc.attrs.lastName}"/> 
      </div> 
      <div> 
       <p>Age</p> 
       <h:outputText value="#{cc.attrs.age}"/> 
      </div> 
     </div> 
    </f:verbatim> 
</composite:implementation> 

Pour utiliser ajax, je l'ai fait (avis render attribut)

<h:form id="search"> 
<div> 
    <h:commandButton value="Search" action="#{customerSearchController.search}"> 
     <f:ajax execute="@form" render="search:result"/> 
    </h:commandButton> 
</div> 
<customer:customer id="result" 
        rendered="#{customerSearchController.customer != null}" 
        firstName="#{customerSearchController.customer.firstName}" 
        lastName="#{customerSearchController.customer.lastName}" 
        age="#{customerSearchController.customer.age}"/> 
</h:form> 

Mon CustomerSearchController est présenté comme suit

private Customer customer; 

// getter's and setter's 

public void search() { 
    customer = new Customer(); 

    customer.setFirstName("First"); 
    customer.setLastName("Last"); 

    customer.setAge(30); 
} 

CustomerSearchController et Customer sont des beans gérés. Mais quand j'appelle la requête ajax, il se plaint: recherche: résultat non trouvé

Que dois-je faire pour résoudre ce problème ???

Répondre

1

<f:ajax render> doit pointer vers un ID client existant dans l'arborescence DOM HTML. Cependant, étant donné que l'élément search:result n'est pas disponible dans l'arborescence DOM HTML car il n'est pas rendu par le serveur, JS/ajax ne trouve rien dans l'arborescence HTML DOM à mettre à jour/restituer. Enveloppez-le dans un autre élément qui est toujours disponible dans l'arborescence DOM HTML afin qu'Ajax puisse le localiser.

<h:panelGroup id="result"> 
    <customer:customer rendered="..." /> 
</h:panelGroup> 

Rien à voir avec le problème réel, notez que f:verbatim est censé contenir verbatim seulement (HTML brut), pas de composants JSF. Remplacez-le par h:panelGroup.

+0

Merci beaucoup. Tu as sauvé ma journée. Et JSF 2 est puissant –

+0

De rien. – BalusC