从托管bean重定向POST

时间:2014-12-23 09:48:09

标签: jsf

我有一个简单的JSF和托管bean,我需要在页面渲染时进行POST重定向,并且某些条件为真。 JSF:

<h:panelGroup rendered="#{myBean.error=null}">
    <p>Some data</p>
</h:panelGroup>

在托管bean中,init()方法,注释为@PostConstruct,在此方法中我做

@PostConstruct
public void init() {
    if (someCondition) {
        FacesContext context = FacesContext.getCurrentInstance();
        String redirectUrl = "http://myurl.com";
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();

        try {
            ec.redirect(redirectUrl);
        } catch (IOException e) {
            e.printStackTrace();
            FacesMessage message = new FacesMessage(e.getMessage());
            context.addMessage(null, message);
        }
    }
}

但我需要使用POST参数导航用户redirectUrl,但无法找到如何操作。 使用按钮,它将是这样的:

<form method='post' action="myUrl">
    <input type='hidden' name='param1' value='value1'/>
    <input type='hidden' name='param2' value='value2'/>
    <input name='button'  type='submit' value="Button">
</form>

1 个答案:

答案 0 :(得分:0)

你试图实现的目标是不可能的。

重定向将向客户端发送一个http 302状态代码,其中包含一个包含要重定向到的URL的位置标头。然后,客户端将向该URL发出get请求,您的帖子数据将丢失。

有其他方法可以实现这一目标,这里有一些想法。

  • 您可以使用ExternalContext.html#dispatch方法转发请求,有关差异,请参阅this post。请注意,这不会更改浏览器地址栏中的网址。
  • 您可以将帖子数据存储在用户的会话中。