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

Tob*_*ias 9 jsf post redirect get request

我有一个JSF页面,通过context.getExternalContext().redirect(url);url的位置重定向.喜欢login.jsf?token = foobar

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

Bal*_*usC 16

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

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

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


小智 9

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

支持Bean:

public String submitValue() {
        return "temp";
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)