隐式导航 - 未设置GET参数

时间:2015-12-22 09:14:57

标签: jsf navigation http-request-parameters

我的一个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键似乎没有出现在params Map中,我做错了什么?

1 个答案:

答案 0 :(得分:2)

  

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

您实际上没有执行重定向。你正在进行前锋。您实际上没有使用其中的参数创建新的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中,因此您实际上根本不想执行重定向,而是真正的转发,那么您应该寻找一种不同的方法来传递数据:{ {3}}