Могу ли я использовать JSF flash для передачи параметров сервлету? - PullRequest
1 голос
/ 18 ноября 2011

Чтобы передать скрытый параметр из обработчика действий управляемого JSF 2.0 в сервлет, я передаю значение параметра в атрибут Session:

public void callServlet(long id) {
  try {
    ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
    HttpSession sess = (HttpSession) ctx.getSession(false);
    sess.setAttribute("id", id);
    ctx.redirect("MyServlet");
  } catch (IOException ex) {
    Logger.getLogger(ResultBean.class.getName()).log(Level.SEVERE, null, ex);
  }
}

Существуют ли более эффективные способы сделать это, например,Можно ли использовать флэш-карту для отправки этого скрытого параметра сервлету?

1 Ответ

2 голосов
/ 18 ноября 2011

Область действия 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);
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...