2010-10-10 8 views
0

J'ai commandLink avec un actionListener qui appelle une méthode pour modifier la valeur de text. Le même commandLink a un action qui recharge la page. Lorsque je clique sur le commandLink, le actionListener est appelé. Mais le action seulement est terminé - en affichant la valeur mise à jour du texte - lorsque je rafraîchis le navigateur. Pourquoi le outputText n'est pas mis à jour automatiquement?page ne pas actualiser après une action est appelée

Certains code: home.jspx

(...) 
<f:view> 
<table id="main_table"> 
<tr><td width="160px"><jsp:directive.include file="./logo.jspx" /></td> 
     <td><jsp:directive.include file="./header.jspx" /></td></tr> 
<tr><td width="160px"><jsp:directive.include file="./vertical_navigation.jspx" /></td> 
     <td align="center"><ice:outputText value="main" /></ice:outputText></td></tr> 
</table> 
</f:view> 
(...) 

customer.jspx est le même, mais la valeur de la outputText est #{customer.text} vertical_navigation.jspx: de nombreux liens de commande comme celle-ci :

(...) 
<ice:form id="nav_form"><ice:panelGrid columns="1"> 
    <ice:panelCollapsible expanded="true"> 
    <f:facet name="header"><ice:panelGroup> 
     <ice:outputText value="Customer" /> 
    </ice:panelGroup></f:facet> 
    <ice:panelGrid columns="1"> 
     <ice:commandLink actionListener="#{client.defineText}" 
     immediate="true" action="customer" id="list"> 
     <ice:outputText value="List" /> 
     </ice:commandLink> 
(...) 

le haricot:

(...) 
public String text; 
public void defineText(ActionEvent evt) { 
text = ... some text related to the link 
} 
public String getText() { 
return text; 
} 

Eh bien, tout fonctionne très bien, sauf que je dois rafraîchir la page lorsque je clique sur un lien pour que la valeur de text est mis à jour. J'ai mis quelques saturations System.out.println() dans les méthodes du bean et j'ai remarqué que la méthode defineText est appelée chaque fois que je clique sur un lien. Mais le getText est appelé seulement après un rafraîchissement. La sortie est comme ceci:

// click the link "list" 
called defineText for link list 
// click the link "new" 
called defineText for link new 
// click the link "external" 
called defineText for link external 
// refresh the broswer 
called getText // this will show the updated value of "text" for the link "external" 
// click the link "new" 
// refresh the broswer 
called defineText for link new 
called getText // this will show the updated value of "text" for the link "new" 

Je travaille avec JSF 1.2 et Icefaces 1.8.2.

Répondre

1

J'ai finalement trouvé une solution. J'ai enlevé le JSF 1.2 Apache Myfaces et substitué par les pots de Sun RI. Si quelqu'un peut expliquer pourquoi cela a fonctionné, j'apprécierai.

0

Je ne travaille pas avec IceFaces, mais essayez d'enlever immediate="true" de votre lien de commande - avec la norme h:commandLink il pourrait causer le problème.

+0

Je l'ai déjà essayé. La méthode getText est appelée (la page est rafraichie, bonne) mais la méthode defineText n'est plus appelée, ce qui signifie que l'actionListener ne fonctionne pas - mauvais. :-( –

0

Son sur le cycle et la façon dont les événements sont gérés.

de mon expérience, deux façons de le corriger:

1) file d'attente de l'événement (vérifier les différents types d'événements) jusqu'à ce que son temps de mettre à jour les valeurs. 2) contourner par piégeage avec une autre étiquette

Questions connexes