FacesContext.... редирект (страница): как перенаправить с данными?

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

.. FacesContext.getCurrentInstance() getExternalContext() перенаправления ("page1.xhtml");

У меня есть несколько строк "regNo", которые я хочу отправить. Кроме того, дайте мне знать, как я получаю его в page1.xhtml.

1 ответ

Есть несколько вариантов. Два самых простых упоминаются здесь:

  1. Просто передайте его как параметр HTTP-запроса.

    String regNo = "somevalue";
    String url = "/page1.xhtml?regNo=" + URLEncoder.encode(regNo, "UTF-8");
    ec.redirect(ec.getRequestContextPath() + url);
    

    ( URLEncoder является обязательным для случая, когда значение содержит не-ASCII или специальные символы URL, или если оно содержит только цифры, то можно пропустить кодировку URL)

    Это доступно #{param.regNo} в целевом представлении, которое вы можете установить как свойство bean через @ManagedProperty или же <f:viewParam name="regNo"> обычный способ. Смотрите также ViewParam против @ManagedProperty (value = "# {param.id}").


  2. Передайте его как объект со вспышкой.

    String regNo = "somevalue";
    String url = "/page1.xhtml";
    ec.getFlash().put("regNo", regNo);
    ec.redirect(ec.getRequestContextPath() + url);
    

    Это доступно #{flash.regNo} в целевом представлении, которое вы можете установить как свойство bean через @ManagedProperty,

    @ManagedProperty("#{flash.regNo}")
    private String regNo; // +setter
    

Основное функциональное отличие состоит в том, что подход с использованием параметров HTTP-запроса идемпотентен, а подход с использованием объектов с флеш-областью не идемпотентен. Другими словами, только подход параметра запроса HTTP является закладочным, точно такой же результат может быть воспроизведен просто копированием / закладкой / совместным использованием URL.

Другие вопросы по тегам