JSF:重定向到url作为POST而不是GET

时间:2011-03-23 13:09:55

标签: jsf post redirect get request

我有一个JSF页面,通过context.getExternalContext().redirect(url);重定向,其中url是sth。喜欢 login.jsf?token = foobar

我现在想要的是通过POST而不是通过GET请求发送令牌。所以它没有出现在url中,这可以用JSF吗?

2 个答案:

答案 0 :(得分:15)

使用HTTP是不可能的,因此JSF也不行。但是有几种方法可以达到这个要求。

将其放入会话范围。在重定向页面后面的bean中,从会话范围中读取并删除它。或者当您使用JSF 2.0时,请使用闪存范围。

转发到包含指向所需网址的POST表单的页面,将该标记作为隐藏的输入值,并包含一些在页面加载时执行form.submit()的JS代码。

答案 1 :(得分:8)

是的,您可以通过将您的支持bean重定向到包含所有隐藏值的临时页面来执行此操作并使用form.submit();示例:

支持Bean:

public String submitValue() {
        return "temp";
}

temporary.jsf

<h:form id="JsfTemp" prependId="false">
  <h:outputText id="welcomeOutput" value="Test Sending form"/>
  <h:inputHidden id="Merchant_Number" value="#{paymentBean.paymentDetails.merchantNumber}" />
</h:form>
</body>

<script type="text/javascript">
  function submitPage() {
    document.getElementById("JsfTemp").action="http://localhost:9090/TestClient/HelloWorld";
    document.getElementById("JsfTemp").submit();
  }
  submitPage();
</script>