2011-04-14 1 views
0

Dans mon application JSF, je dois rediriger le constructeur du bean géré. Je code suivant pour le faire:Constructeur de bean géré de formulaire de redirection lançant "java.lang.IllegalStateException"

HttpServletResponse httpServletResponse = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
httpServletResponse.sendRedirect("HomeV.jsf"); 

mais cela jette exception suivante:

java.lang.IllegalStateException 
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435) 
    at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:126) 
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:419) 

J'ai même essayé suivant:

FacesContext.getCurrentInstance().getExternalContext().redirect("HomeV.jsf"); 

comme mentionné dans la question stackoverflow liée à ce here mais je suis toujours confronté à la même exception.

+0

En relation: http://stackoverflow.com/questions/4032825/how-to-make-a-redirection-in-jsf/4099405#4099405 Mais dans ce cas particulier, vous ne semblez pas avoir besoin de cas de navigation. Selon l'exigence fonctionnelle, j'utiliserais un filtre. – BalusC

Répondre

2

Ne faites pas cela dans le constructeur. Je doute que la réponse soit dans un bon état là-bas. Peut-être que vous pouvez essayer de le faire en @PostConstruct, mais je ne garantis pas que cela fonctionnera.

Idéalement, vous devriez effectuer des redirections via les règles de navigation à partir des méthodes d'action du bean. Si vous souhaitez effectuer une redirection sur plusieurs actions, vous pouvez utiliser un

+0

+1, @Abhishek vous pouvez ajouter quelques informations supplémentaires pourquoi vous faites cela? –

+0

J'ai essayé ceci avec la règle de navigation aussi bien. Le problème est le suivant: j'appelle une méthode du constructeur du bean et écrit la navigation pour travailler sur le résultat de cette méthode. La fonction est appelée depuis le bean et fonctionne comme prévu mais ne voit pas la navigation se produire. La raison pour laquelle je pensais que cela ne fonctionnait pas est que la navigation fonctionne sur l'action effectuée et non si la fonction est appelée depuis une autre fonction. Est-ce que je comprends bien? Quelqu'un peut-il suggérer une autre approche –

+0

@Abhishek oui, vous avez raison. Le constructeur est quelque chose qui ne devrait pas être utilisé dans un environnement géré comme JSF/CDI. Pourquoi, en premier lieu, vous souhaitez rediriger la création de beans? – Bozho

0

Les haricots peuvent également être créés lorsque le contexte est simplement initialisé, donc ce n'est pas une bonne approche.

Questions connexes