<h:form>
別のサーバーに送信するために使用することはできません。デフォルトでは、現在の<h:form>
リクエストURLに送信されます。また、フォーム識別子やJSFビューステートなどの非表示の入力フィールドが自動的に追加されます。また、入力フィールド名で表されるようにリクエストパラメータ名を変更します。これはすべて、外部サーバーに送信するには不適切です。
を使用するだけ<form>
です。JSFページでプレーンHTMLを完全にうまく使用できます。
更新:コメントによると、実際の問題は、投稿先のWebサービスから取得したzipファイルを処理する方法がわからず、実際に間違った方向で解決策を探していたということです。
JSF<h:form>
を使い続け、通常のクライアントAPIを使用してWebサービスに送信し、ZIPファイルを次のフレーバーで取得したらInputStream
(コメントに示されているようにラップしないReader
でください。zipファイルは文字コンテンツではなくバイナリコンテンツです)、次のようにして、HTTP応答本文に書き込みExternalContext#getResponseOutputStream()
ます。
public void submit() throws IOException {
InputStream zipFile = yourWebServiceClient.submit(someData);
String fileName = "some.zip";
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
ec.responseReset();
ec.setResponseContentType("application/zip");
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
OutputStream output = ec.getResponseOutputStream();
try {
byte[] buffer = new byte[1024];
for (int length = 0; (length = zipFile.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
} finally {
try { output.close(); } catch (IOException ignore) {}
try { zipFile.close(); } catch (IOException ignore) {}
}
fc.responseComplete();
}
参照: