1

guice/ginを使用して次のことを実現できるようにしたいと思います。

  1. サーバーからあらゆる種類の定数を取得します(ユーザー設定、言語など)
  2. これらの定数をguice/ginモジュールの「Named(###)」にバインドします
  3. 上記の2つのステップを開始した後にのみ呼び出される、コード内のコンストラクターにそれらを挿入します。

どういうわけかこれを行うことができますか?もしそうなら、どのように?

4

1 に答える 1

2

サーバーからアプリケーションにデータを取得するには、基本的に2つの方法があります。RPCを作成するか、最初のページ読み込みでいくつかのグローバルJavascript変数を設定します。

これらがサーバー上で大量の計算を必要としない比較的単純な定数であると仮定すると、最善の策はおそらくそれらをページのロード(つまり、GWTアプリケーションをブートストラップするHTMLページ)に含めることです。たとえば、ページは次のようになります。

<html>
<head>
...
<!-- This block would be generated by your server-side templating system -->
<script>
  var globalFoo = 1234; 
</script>
...
</head>
<body>
...

次に、クライアントで、次のようなコードのスニペットを含むGinモジュールを作成できます。

@Provides
@Foo int providesFoo() {
  return getNativeFoo();
}

// Use JSNI to get the global Javascript variable.
private static native int getNativeFoo() /*-{
  return globalFoo;
}-*/;

これには、すべてのバインディングアノテーションをハードコーディングする必要があります(アノテーションを使用している場合でも@Named)。ジンでは、これを回避する方法はありません。すべてのバインディングは、GWTのコンパイル時に認識されている必要があります。

RPCベースのアプローチを採用する場合、Ginを使用してもあまり役に立ちません。代わりに、RPCの前にオブジェクトを作成し、RPC応答をリッスンしてから、応答に基づいて更新を行うことをお勧めします。

それがあなたの質問に答えることを願っています。

于 2012-07-02T20:49:15.887 に答える