Область действия Flash использует комбинацию файлов cookie и области действия сеанса под обложками.Таким образом, чтобы достичь того же эффекта, вам нужно установить cookie от JSF и получить cookie в Servlet.Но это не намного лучше, чем у вас уже есть.Другой способ - сохранить атрибут по уникальному идентификатору в сеансе и передать его в качестве параметра запроса, если вы хотите, чтобы конечный пользователь не знал / не угадал значение и не нарушал целостность нескольких запросов в одном сеансе.
public void callServlet(Long id) throws IOException {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
String uuid = UUID.randomUUID().toString();
ec.getSessionMap().put(uuid, id);
ec.redirect("MyServlet?id=" + uuid);
}
(обратите внимание, что я исправил ваш код для удаления потенциального NullPointerException
и избавил от необходимости иметь javax.servlet
определенный код в вашем JSF, что является признаком плохой практики)
и в сервлете:
String uuid = request.getParameter("id");
Long id = (Long) request.getSession().getAttribute(uuid);
request.getSession().removeAttribute(uuid);
// ...