Jsf FacesContext…重定向(页面):如何使用数据重定向?

Jsf FacesContext…重定向(页面):如何使用数据重定向?,jsf,redirect,externalcontext,Jsf,Redirect,Externalcontext,有人能告诉我如何通过以下重定向方法重定向数据吗: FacesContext.getCurrentInstance().getExternalContext().redirect(“page1.xhtml”) 我想发送一些字符串“regNo”。另外,一定要让我知道我是如何在page1.xhtml中收到它的。有几个选项。这里提到了两个最直接的问题: 只需将其作为HTTP请求参数传递 String regNo = "somevalue"; String url = "/page1.xhtml?regN

有人能告诉我如何通过以下重定向方法重定向数据吗:

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);
    
    (如果值包含非ASCII或URL特殊字符,则必须使用
    urlcoder
    ,或者如果它仅包含数字,则可以跳过URL编码)

    它可以通过目标视图中的
    {param.regNo}
    获得,您可以通过
    @ManagedProperty
    以常规方式将其设置为bean属性。另见


  • 将其作为flash作用域对象传递

    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请求参数方法是幂等的,而flash作用域对象方法是非幂等的。换句话说,只有HTTP请求参数方法是可设置书签的,仅通过复制粘贴/设置书签/共享URL即可复制完全相同的结果