J'ai l'obligation de lancer une page jsf à partir d'un client léger personnalisé dans le navigateur de l'utilisateur (le client léger envoie un message http). Comme la page jsf peut être invoquée plusieurs fois, j'utilise un jsp pour rediriger vers la page jsf avec params sur url. En jsp je fais une invalidation de session. Le code jsp est ci-dessous:Utilisation de Post lors d'un envoi de redirection
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@page session="true" %>
<%
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
session.invalidate();
String outcome = request.getParameter("outcome");
String queryString = "outcome=" + outcome ;
response.sendRedirect("./faces/MyPage.jspx?" + queryString);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></meta>
<title>title here</title>
</head>
<body></body>
</html>
Ma page JSF utilise tomber mutiple vers le bas avec des articles autosubmit activé. Je définis les paramètres sur la session lorsque le formulaire est initialisé puis l'utilise à partir de là lorsqu'un bouton d'action est finalement cliqué par l'utilisateur. Voici le code que j'utilise pour obtenir le constructeur dans param backing bean JSF:
FacesContext ctx = getFacesContext();
Map sessionState = ctx.getExternalContext().getSessionMap();
outcome = (String)sessionState.get("outcome");
if(outcome == null) //if not on session, get from url
outcome = (String)JSFUtils.getManagedBeanValue("param.outcome");
De cette façon, je peux obtenir le même après plusieurs param autoSubmits de menus déroulants.
Mon problème est que je ne peux pas avoir de paramètres apparaissent sur la barre d'adresse du navigateur. J'ai besoin d'un moyen pour que les paramètres puissent être transmis à la page jsp. Je ne peux pas publier directement sur jsp à partir du client léger, car j'ai besoin de la page jsf pour avoir une nouvelle session chaque fois que le client lance le navigateur de l'utilisateur. Ceci est dû à l'extrait de code ci-dessus sur la façon dont j'utilise les paramètres dans la page jsf.
Y a-t-il moyen d'utiliser un post lors d'un sendRedirect pour ne pas avoir à passer de params sur url? Je ne peux pas utiliser forward car lorsqu'un autoSubmit se déclenche sur une page jsf, le navigateur actualise la page jsp à la place.
Existe-t-il une meilleure façon de gérer la page jsf elle-même afin que je ne doive pas compter sur le stockage des paramètres sur la session entre les événements autoSubmit successifs?
Pour ceux qui interprète la question , alors la réponse serait "Oui, vous pouvez utiliser une redirection 307". – BalusC
D'accord. Mais autant que je sache, vous ne pouvez pas faire un 307 avec la méthode JSP sendRedirect(). – xgMz
Non, la valeur par défaut est 302. Vous pouvez toutefois définir vous-même l'état de la réponse et l'en-tête. Voir aussi http://stackoverflow.com/questions/4836858/is-response-redirect-always-an-http-get-response/4837351#4837351 – BalusC