隐式导航 - 未设置 GET 参数

Posted

技术标签:

【中文标题】隐式导航 - 未设置 GET 参数【英文标题】:Implicit Navigation - GET parameter not set 【发布时间】: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 中,我做错了什么?

【问题讨论】:

【参考方案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@.

【讨论】:

以上是关于隐式导航 - 未设置 GET 参数的主要内容,如果未能解决你的问题,请参考以下文章

jsp九大隐式对象都有啥?

未找到隐式 FromRequestUnmarsharell

简述web程序设计中网页之间隐式参数的传递?

隐式导航不起作用

导航组件隐式深层链接后按退出应用

JSF Flow - 隐式导航不起作用