0

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

FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");

我有一些要发送的字符串“regNo”。另外,请让我知道我是如何在 page1.xhtml 中收到它的。

4

1 回答 1

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}将其设置为 bean 属性。另请参阅ViewParam 与 @ManagedProperty(value = "#{param.id}")@ManagedProperty<f:viewParam name="regNo">


  2. 将其作为 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就可以复制完全相同的结果。

于 2013-11-15T11:17:40.720 回答