JSF: перенаправить на URL как POST, а не как GET - PullRequest
8 голосов
/ 23 марта 2011

У меня есть страница JSF, которая перенаправляет через context.getExternalContext().redirect(url);, где URL-адрес - sth. как login.jsf? token = foobar

Теперь я хочу отправить токен через POST, а не через запрос GET. Чтобы это не отображалось в URL, возможно ли это с JSF?

Ответы [ 2 ]

16 голосов
/ 23 марта 2011

Это невозможно с HTTP, так же как и с JSF. Однако есть несколько способов выполнить это требование.

Поместите это в область видимости сеанса. В компоненте за перенаправленной страницей прочитайте и удалите его из области сеанса. Или, когда вы используете JSF 2.0, используйте флеш-прицел.

Переадресация на страницу, содержащую форму POST, указывающую на нужный URL, с токеном в качестве скрытого входного значения и включением некоторого кода JS, который выполняет form.submit() при загрузке страницы.

8 голосов
/ 31 мая 2011

Да, вы можете сделать это, перенаправив компонент поддержки на временную страницу, содержащую все скрытые значения и использующую form.submit(); Пример:

Фасоль:

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>
...