有人可以通过以下重定向方法告诉我如何使用数据重定向:
FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");
我有一些要发送的字符串“regNo”。另外,请让我知道我是如何在 page1.xhtml 中收到它的。
有人可以通过以下重定向方法告诉我如何使用数据重定向:
FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");
我有一些要发送的字符串“regNo”。另外,请让我知道我是如何在 page1.xhtml 中收到它的。
有几个选项。这里提到了两个最直接的:
只需将其作为 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 属性。另请参阅ViewParam 与 @ManagedProperty(value = "#{param.id}")。@ManagedProperty
<f:viewParam name="regNo">
将其作为 flash 作用域对象传递。
String regNo = "somevalue";
String url = "/page1.xhtml";
ec.getFlash().put("regNo", regNo);
ec.redirect(ec.getRequestContextPath() + url);
它#{flash.regNo}
在目标视图中可用,您可以通过 .cna 将其设置为 bean 属性@ManagedProperty
。
@ManagedProperty("#{flash.regNo}")
private String regNo; // +setter
主要的功能区别在于 HTTP 请求参数方法是幂等的,而 flash 作用域对象方法是非幂等的。换句话说,只有HTTP请求参数的方法是可收藏的,只需复制粘贴/添加书签/共享URL就可以复制完全相同的结果。