1

これが流れです:


0 - ユーザーが http:\ form_url に移動します
1 - フォームが表示 されます
2 - ユーザーがフィールドに入力します
3 - ユーザーが [PDF を保存して生成] をクリックします
4a - アプリは新しいブラウザー タブを開き、pdf を
表示します 4b - アプリは新しい空のフォームを元のタブ

今までは 4a または 4b を実行できました。同時に両方ではなく、どちらか一方です。

助けてくれませんか、ありがとう

4

1 に答える 1

1

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.
于 2012-10-24T16:30:22.393 に答える