JSF ajout de paramètres de requête
Je suis en utilisant JSF et j'ai un backing bean méthode qui fait un peu de traitement et établit un
la variable "résultat" qui décide ensuite de la page suivante pour naviguer jusqu'à selon sur les
faces-config.xml règles de la navigation.
Ce que je veux faire est d'ajouter des paramètres à l'URL (dans le backing bean?) lorsque la page suivante est à utiliser pour la navigation.
Toutefois, dans le Gestionnaire d'où le backing bean méthode est, il n'y a aucune référence à l'
Objet HttpRequest. C'est là un gestionnaire qui a été autour pendant un long moment, donc je
je me demande comment je peux faire
request.setAttribute("name", value);
Est-il une approche différente disponible pour le JSF? Toute aide appréciée.
HI BalusC,
Je suis en train de mettre en œuvre ce que vous avez expliqué ci-dessous, cependant je suis confronté à un problème.
C'est ce que j'ai:
StringBuffer url = ( (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURL();
url.append( "?serialNumber=");
url.append(regBean.getSerialNumber());
try{ FacesContext.getCurrentInstance().getExternalContext().redirect(url.toString());
}catch (Exception ex){
ex.printStackTrace();
}
Il n'y a pas d'exception générée mais j'ai un Http 500 erreur "le serveur a rencontré une erreur inconnue." Le journal montre un peu plus en détail, mais pas assez pour être utile:
ERREUR [cycle de vie] JSF1054: (Phase ID: INVOKE_APPLICATION 5, Vue ID: /enregistrement/productValidation.jsp) Exception levée lors de la phase d'exécution: javax.des visages.de l'événement.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@591dae]
11:19:12,186 ERREUR [[Faces Servlet]] Servlet.service() de la servlet Faces Servlet jeté exception
java.lang.IllegalStateException
au org.apache.catalina.connecteur.ResponseFacade.sendRedirect(ResponseFacade.java:435)
au com.soleil.des visages.contexte.ExternalContextImpl.redirect(ExternalContextImpl.java:421)
au com.soleil.des visages.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:181)
au com.soleil.des visages.application.ActionListenerImpl.processAction(ActionListenerImpl.java:130)
au javax.des visages.composante.UICommand.diffusion(UICommand.java:387)
au org.ajax4jsf.composante.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
au org.ajax4jsf.composante.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
au org.ajax4jsf.composante.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
au org.ajax4jsf.composante.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
au com.soleil.des visages.cycle de vie.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
au com.soleil.des visages.cycle de vie.De Phase.doPhase(Phase.java:100)
Toutes les idées, à tous sera très apprécié. Merci!
Ok, merci pour vos commentaires, j'ai changé quelques trucs autour, et maintenant j'ai:
FacesContext.getCurrentInstance().getExternalContext().redirect("mypage.jsp?serialNumber=555555");
Sur le débogage, je peux voir que la redirection fonctionne depuis sur mypage.htm je suis l'affichage des en-têtes d'un resourcebundle (fichier de propriétés) donc, quand il a essayé d'obtenir l'en-tête pour afficher c'est la rencontre d'un NullPointer sur la ligne ci-dessous:
FacesContext context = FacesContext.getCurrentInstance();
contexte est null, le journal montre NullPointer erreur, mais l'url de la page est correcte, je peux voir la barre d'adresse montrant http://..../mypage.jsp?serialNum=5555 tout comme prévu!
Il semble avoir de la difficulté à simplement afficher le contenu de la page. Si proche et pourtant si loin ;-(
OriginalL'auteur msharma | 2009-12-31
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour tirer
ExternalContext#redirect()
dans la fève de la méthode d'action vous-même.Si votre IDE programme de validation des secousses sur le
void
méthode d'action, alors vous pouvez simplement l'ignorer ou de le déclarer de nouveau àString
et mettrereturn null;
à la fin de la méthode bloc.Si vous souhaitez définir les paramètres particuliers de retour dans quelques haricots dans la suite de la demande, puis vous pouvez les définir comme des propriétés gérées dans faces-config.xml par
#{param.name1}
et#{param.name2}
.Cela dit, les attributs de la requête ne doit pas être confondue avec les paramètres de la demande. Les attributs de la requête sont attachés à la actuel demande dans le côté serveur seulement. Ils sont en aucun cas transmises à la prochaine demande. Il vous demande d'utilisation de paramètres pour lesquelles vous pouvez soit joindre à l'URL de redirection ou de l'inclure en tant que paramètres cachés dans un formulaire POST dans la page de réponse.
En outre, il peut être utile de savoir que vous pouvez obtenir une poignée de l'
HttpServletRequest
dans JSF parExternalContext#getRequest()
. Vous devriez cependant, essayez d'éviter d'aller jusque-là à tirer sur le "raw" Servlet API sous le JSF hottes. Rendre l'utilisation de JSF-salle autant que possible.Règles de Navigation seront ignorés.
ExternalContext#redirect()
appelleraFacesContext#responseComplete()
.par la lettre de la spécification, l'URL doit passer à travers
ExternalContext.encodeActionURL
avant d'être utilisés pour rediriger - si dans la plupart des cas, il sera retourné à l'identique.Salut BalusC, je suis en train de mettre en œuvre ce que vous avez suggéré que nous avons à l'aide de JSF1.2 et n'ont pas les caractéristiques cool McDowell a gentiment suggéré. Je suis frapper un problème, toutes les idées, j'ai édité mon post original.
L'exception est dit que la réponse a déjà été commis. Une partie est déjà envoyée au client. C'est un point de non-retour. Vous ne pouvez pas le changer plus avec sendredirect. Avez-vous quelque chose dans le servlet/filtre de la chaîne qui est en train de modifier la réponse? E. g. la définition de certains en-têtes, d'écrire quelque chose, à la production et/ou de rinçage de la sortie, etc. Était-ce par la voie d'une requête ajax ou normale de la demande?
OriginalL'auteur BalusC
JSF 2 paramètres ajoutés à la navigation handler via le
view-param
élément. À partir de la spécification:OriginalL'auteur McDowell