隐式导航 - 未设置 GET 参数

Implicit Navigation - GET parameter not set

我的一个 ManagedBean 中有一个方法可以重定向到另一个页面,它还应该将一个 id 附加到 URL。

例如

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,我做错了什么?

... which will redirect to another page ...

您实际上并没有执行重定向。你在表演前锋。您实际上并没有使用其中的参数创建新的 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 中隐藏起来,因此您实际上根本不想执行重定向,而是真正的转发,那么您应该寻找一种不同的方法传递数据:Pass an object between @ViewScoped beans without using GET params.