FacesContext .... redirect(页面):如何重定向数据?

时间:2013-11-15 11:10:16

标签: jsf redirect externalcontext

有人可以通过以下重定向方法告诉我如何使用数据重定向:

FacesContext.getCurrentInstance()getExternalContext()重定向( “page1.xhtml”);

我想要发送一些字符串“regNo”。另外,请告诉我如何在page1.xhtml中收到它。

1 个答案:

答案 0 :(得分:2)

有几种选择。这里提到了两个最简单的方法:

  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}可以使用它,您可以通过常规方式通过@ManagedProperty<f:viewParam name="regNo">将其设置为bean属性。另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}")


  2. 将其作为闪存范围对象传递。

    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
    
  3. 主要的功能差异是HTTP请求参数方法是幂等的,而闪存范围对象方法是非幂等的。换句话说,只有HTTP请求参数方法是可收藏的,只需复制/加入/共享URL就可以重现完全相同的结果。