Bonjour,

J'arrive cette fois avec un problème un peu plus corsé.

J'affiche une page munie de son propre controleur. Cette page contient une iframe qui appelle une servlet pour afficher un document PDF.

Tout marche très bien sauf que plus aucune action sur ma page principale ne fonctionne... lorsque je clique, cela aboutit systématiquement à un rechargement de ma page et l'action n'est pas effectuée.

Je vais donner un peu de code pour simuler la situation.

page jsf
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<a4j:keepAlive beanName="afficherCourrierHandler" />
...
<h:commandLink action="#{afficherCourrierHandler.repondre}" 
        value="#{msg.GLOBAL_action_repondre}" />
...
<iframe src="<%=request.getContextPath() %>/AfficherCourrierServlet" 
        height="500" width="400"/>
Ma servlet s'appelle /AfficherCourrierServlet. Elle affiche un document PDF qui lui est passé sous la forme d'un tableau de byte et envoyé sur la sortie standard.
Elle fonctionne (le pdf s'affiche).

Le lien permettant de lancer l'action s'affiche aussi.
afficherCourrierHandler.repondre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public String repondre() {
        System.out.println("AfficherCourrierHandler : repondre()");
        //on met le courrier choisi dans la requête
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) 
                facesContext.getExternalContext().getRequest();
        request.setAttribute("courrierRepondu", courrier);
 
        System.out.println("AfficherCourrierHandler : FIN repondre()");
        //on va sur la page poster.jsp
        return "repondre";
}
A noter que lorsque je met en commentaire l'iframe, mon action fonctionne (au moins le premier System.out.println s'affiche).
Lorsque l'iframe est là, la page se réinitialise avec le bean alors qu'il est marqué en a4j:keepAlive. Il ne devrait donc pas se réinitialiser...

Est-ce que quelqu'un aurait une idée sur la question ? La solution m'échappe totalement :s.