FacesContext.... редирект (страница): как перенаправить с данными?
Может кто-нибудь сказать мне, как перенаправить с данными, с помощью следующего метода перенаправления:
.. FacesContext.getCurrentInstance() getExternalContext() перенаправления ("page1.xhtml");
У меня есть несколько строк "regNo", которые я хочу отправить. Кроме того, дайте мне знать, как я получаю его в page1.xhtml.
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}").Передайте его как объект со вспышкой.
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.