JSP から GWT エントリ ポイントにセッション属性とパラメータを渡すことができるかどうか疑問に思っています。
Struts2 を GWT に統合したように。
さて、私の質問は、セッション属性を JSP から GWT エントリ ポイントに渡すことはできますか? 前もって感謝します。
答えは JSP + GWT Dictionary クラスです。
ホスティング ファイルとして (html ファイルの代わりに) JSP を使用して、モジュールのロード時に GWT の後いつでも Dictionary クラスを呼び出します。
<script>
var info = {js object structure}; // Use Dictionary class to retrieve info.
</script>
ただし、セッション情報をエントリ ポイントに渡すことには利点がない場合があります。物議を醸すのは、セッションが期限切れになり、GWT クライアントがまだブラウザー上にある場合はどうなるかということです。
セッションが古くなっている場合は、 window.location 呼び出しを行って GWT クライアントを更新することを確認できると思います。これは良い習慣ではありません。AJAX を使用する理由の 1 つは、クライアントとサーバーのデータ交換を行っているときに、申し訳ありませんと言う必要がない (つまり、ページを更新する必要がない) ことです。
JSP +辞書の方法でサーバーからクライアントにあらゆる種類の静的情報を渡す必要がありますが、セッションでは渡さないでください。
アーキテクチャは、セッションの有効期限が切れたときに再認証を強制する必要があり、セッション情報はヘッダーとして (REST または RequestBuilder を使用している場合) 運ぶか、コールバック応答データ構造の一部として (RPC を使用している場合) 運ぶ必要があります。
セッションオブジェクトを渡したい理由がわかりません。結局、サイドではGWT Servlet
なく、それを使用したいのですか?GWT UI
次の方法で、GWT サーブレットでセッション オブジェクトを取得できます。
HttpServletRequest request = this.getThreadLocalRequest();
HTTPSession session = request.getSession();
その後、次のメソッドを使用して、セッション属性を取得および設定できます。
session.setAttribute("XXX", object);
session.getAttribute("XXX")
編集:
その場合、簡単な解決策はないと思います。回避策は次のとおりです。
EntryPoint から、オブジェクトonModuleLoad
にアクセスできる GWT のサーバー側コードを呼び出しますsession
。
HttpServletRequest request = this.getThreadLocalRequest();
HTTPSession session = request.getSession();
セッション オブジェクトから必要な属性とパラメーターを取得し、それを Bean の形式でクライアントに返します。
私のアプリケーションでは、jsp で非表示のボックスを使用します。
<input type="hidden" id="dir_lat" value="<%= request.getattribute("foo") %>"/>
次に、gwt.application で値を取得します。
String foo = ((InputElement) doc.getElementById("dir_lat")).getValue() ;