有人可以通过以下重定向方法告诉我如何使用数据重定向:
。FacesContext.getCurrentInstance()getExternalContext()重定向( “page1.xhtml”);
我想要发送一些字符串“regNo”。另外,请告诉我如何在page1.xhtml中收到它。
答案 0 :(得分:2)
有几种选择。这里提到了两个最简单的方法:
只需将其作为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}
可以使用它,您可以通过常规方式通过@ManagedProperty
或<f:viewParam name="regNo">
将其设置为bean属性。另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}")。
将其作为闪存范围对象传递。
String regNo = "somevalue";
String url = "/page1.xhtml";
ec.getFlash().put("regNo", regNo);
ec.redirect(ec.getRequestContextPath() + url);
目标视图中#{flash.regNo}
可以使用它,您可以通过@ManagedProperty
将其设置为bean属性。
@ManagedProperty("#{flash.regNo}")
private String regNo; // +setter
主要的功能差异是HTTP请求参数方法是幂等的,而闪存范围对象方法是非幂等的。换句话说,只有HTTP请求参数方法是可收藏的,只需复制/加入/共享URL就可以重现完全相同的结果。