JSF: я хочу отправить запрос POST внутри компонента действия - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть метод bean-компонента action:

public void submitForm() {
// here bean save some information about input data in local DB
saveEnteredData();
//  I should redirect to external system page with post params.
}

Поэтому я должен сохранить данные и перенаправить на страницу внешней системы с некоторыми параметрами по POST

Я надеюсь, что выпомоги мне.

1 Ответ

2 голосов
/ 07 февраля 2011

Отправка HTTP 307 перенаправления. Предполагая, что вы все еще на JSF 1.x:

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setStatus(307);
response.setHeader("Location", "http://other.com");
facesContext.responseComplete();

Однако на клиентской стороне будет выдано предупреждение о подтверждении безопасности (не связанное с JSF) с вопросом, может ли сайт повторно отправить введенные данные на другой сайт.

Если вам не нравится это предупреждение, то нет другого выбора, кроме как играть за прокси-сервер самостоятельно.

URLConnection connection = new URL("http://other.com").openConnection();
connection.setDoOutput(true); // POST
// Copy headers if necessary.

InputStream input1 = request.getInputStream();
OutputStream output1 = connection.getOutputStream();
// Copy request body from input1 to output1.

InputStream input2 = connection.getInputStream();
OutputStream output2 = response.getOutputStream();
// Copy response body from input2 to output2.

Однако это не изменит URL, и клиент думает, что он все еще на вашем сайте.

...