【问题标题】:Implicit Navigation - GET parameter not set隐式导航 - 未设置 GET 参数
【发布时间】:2016-03-28 12:03:02
【问题描述】:

我的一个 ManagedBeans 中有一个方法将重定向到另一个页面,它也应该在 URL 上附加一个 id。

例如。

public String editForm(String formId) {
    return "designer?id=" + formId;
}

我从我的主页上这样称呼它

<p:menuitem value="View/Edit" icon="ui-icon-search"
    action="#{formsView.editForm(formsView.selectedForm.id)}" />

然后我有一个在设计器页面中使用的 @ViewScoped bean,在它的 @PostConstruct 我有这样的东西

@PostConstruct
public void init() {
    Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    String formId = params.get("id");
    ...
}

但是 id 键似乎没有出现在参数Map 中,我做错了什么?

【问题讨论】:

    标签: jsf navigation http-request-parameters


    【解决方案1】:

    ...这将重定向到另一个页面...

    您实际上并没有执行重定向。你正在执行前锋。您实际上并没有使用其中的参数创建新的 HTTP 请求。您在当前所在的 HTTP 请求的 HTTP 响应中显示目标页面。要了解差异,请访问 What is the difference between redirect and navigation/forward and when to use what?

    您需要执行真正的重定向。您需要创建一个全新的 HTTP 请求。您可以通过将预定义的 faces-redirect=true 参数附加到查询字符串来做到这一点。

    public String editForm(String formId) {
        return "designer?faces-redirect=true&id=" + formId;
    }
    

    您可以通过查看浏览器的地址栏来确认它的工作。 id 参数必须出现在那里才能使其最终出现在请求参数映射中。

    但是,如果您打算从 URL 中隐藏它,因此您实际上根本不想执行重定向,而是真正的转发,那么您应该寻找一种不同的方法来传递数据:@ 987654322@.

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2017-05-16
      • 2018-03-28
      相关资源
      最近更新 更多