隐式导航 - 未设置 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.
我的一个 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.