У меня есть требование, чтобы страница jsf запускалась с пользовательского тонкого клиента в браузере пользователя (тонкий клиент делает http-сообщение). Поскольку jsf-страница может быть вызвана несколько раз, я использую jsp для перенаправления на страницу jsf с параметрами на url. В jsp я делаю недействительность сессии. Код JSP ниже:Использование Post при выполнении sendRedirect
<!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>
Моя страница JSF использует Mutiple выпадающие элементы с включенным AutoSubmit. Я устанавливаю параметры на сеансе, когда форма сначала вводится, а затем использует ее оттуда, когда пользовательская кнопка нажата. Ниже код я использую, чтобы получить из параметров в 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");
Таким образом, я могу получить из параметров даже после нескольких autoSubmits капельных падения.
Моя проблема заключается в том, что у меня не может быть параметров, отображаемых в адресной строке браузера. Мне нужен способ, чтобы параметры могли быть переданы на страницу jsp. Я не могу отправлять прямо в jsp из тонкого клиента, так как мне нужна страница jsf для нового сеанса каждый раз, когда клиент запускает пользовательский браузер. Это imp из-за вышеприведенного фрагмента кода о том, как я использую params на странице jsf.
Есть ли способ использовать пост при выполнении sendRedirect, чтобы мне не нужно было передавать параметры по URL-адресу? Я не могу использовать forward с тех пор, когда autoSubmit запускается на странице jsf, это заставляет браузер обновлять страницу jsp.
Есть ли лучший способ обработки самой страницы jsf, так что мне не нужно полагаться на сохранение параметров в сеансе между последовательными событиями autoSubmit?
Для тех, кто интерпретирует вопрос , тогда ответ будет «Да, вы можете, используйте перенаправление 307». – BalusC
Согласовано. Но насколько я знаю, вы не можете сделать 307 с помощью метода JSP sendRedirect(). – xgMz
Нет, он по умолчанию равен 302. Однако вы можете просто установить статус ответа и заголовок самостоятельно. См. Также http://stackoverflow.com/questions/4836858/is-response-redirect-always-an-http-get-response/4837351#4837351 – BalusC