У меня есть требование, что страница jsf должна быть запущена из пользовательского тонкого клиента в браузере пользователя (тонкий клиент делает http-пост). Поскольку страница jsf может вызываться несколько раз, я использую jsp для перенаправления на страницу jsf с параметрами в URL. В jsp я делаю сессию недействительной. Код JSP ниже:
<!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 использует несколько выпадающих элементов с включенной автоматической отправкой. Я устанавливаю параметры для сеанса, когда форма сначала создается, а затем использую его оттуда, когда пользователь нажимает на кнопку действия. Ниже приведен код, который я использую для получения параметра в конструкторе бина 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");
Таким образом, я могу получить параметр даже после нескольких автоматических отправок выпадающих.
Моя проблема в том, что я не могу отобразить параметры в адресной строке браузера. Мне нужен способ, чтобы параметры можно было передать на страницу JSP. Я не могу публиковать прямые сообщения в jsp с тонкого клиента, так как мне нужна страница jsf для нового сеанса каждый раз, когда клиент запускает браузер пользователя. Это связано с приведенным выше фрагментом кода о том, как я использую params на странице jsf.
Есть ли способ использовать сообщение при выполнении sendRedirect, чтобы мне не приходилось передавать параметры в URL? Я не могу использовать пересылку, поскольку при автоматической загрузке на странице jsf браузер обновляет страницу jsp.
Есть ли лучший способ обработать саму страницу jsf, чтобы мне не приходилось полагаться на сохранение параметров в сеансе между последовательными событиями autoSubmit?