これが流れです:
0 - ユーザーが http:\ form_url に移動します
1 - フォームが表示
されます
2 - ユーザーがフィールドに入力します
3 - ユーザーが [PDF を保存して生成] をクリックします
4a - アプリは新しいブラウザー タブを開き、pdf を
表示します 4b - アプリは新しい空のフォームを元のタブ
今までは 4a または 4b を実行できました。同時に両方ではなく、どちらか一方です。
助けてくれませんか、ありがとう
これが流れです:
0 - ユーザーが http:\ form_url に移動します
1 - フォームが表示
されます
2 - ユーザーがフィールドに入力します
3 - ユーザーが [PDF を保存して生成] をクリックします
4a - アプリは新しいブラウザー タブを開き、pdf を
表示します 4b - アプリは新しい空のフォームを元のタブ
今までは 4a または 4b を実行できました。同時に両方ではなく、どちらか一方です。
助けてくれませんか、ありがとう
1つのHTTPリクエストに2つのHTTPレスポンスを送信することはできません。
クライアントに2つのHTTPリクエストを送信させる必要があります。この特定のケースでは、セッションで一時的にPDFを生成するために必要なデータを保存し、JavaScriptを使用window.open()
して新しいウィンドウで新しいリクエストを実行し、PDFの生成をトリガーするのが最も簡単です。例えば
id = UUID.randomUUID().toString();
Data data = collectDataWhichIsNecessaryForGeneratingPdf();
externalContext.getSessionMap().put(id, data);
return "brandNewEmptyform";
真新しい空の形で
<h:outputScript rendered="#{not empty bean.id}">
window.open('somePdfServlet?id=#{bean.id}');
</h:outputScript>
次に、にマップされているサーブレットで/somePdfServlet
:
String id = request.getParameter("id");
Data data = (Data) session.getAttribute(id);
session.removeAttribute(id);
// Now generate PDF based on data and write to response the usual way.