私の質問は、Java EE アノテーション付きエンティティ Bean のデータをクライアント側に送信して、たとえばグリッドで使用するための最良の方法は何ですか? 確かに、各エンティティの BaseModel 拡張クライアント モデルを手動で作成できますが、ここでのベスト プラクティスは何でしょうか。可能であれば、段階的なチュートリアルが必要です。
3 に答える
私は ext-gwt (gxt) を約 1 年間使用しており、あなたの痛みを感じています!
これまでに学んだことから、クライアントとサーバー間で Bean をやり取りするための 3 つの戦略があるようです。
各戦略の概要は次のとおりです。
- 各サーバー側オブジェクト Bean/pojo/エンティティ Bean の BaseModel を拡張するクライアント pojo/Bean を作成します。
- クライアントとサーバー間で pojo/bean を共有する
- クライアントに送信する前にサーバー側の pojo/beans を json に変換してから、クライアント側で Javascript (json) オブジェクトを使用します。
もちろん、それぞれにトレードオフがあります。
戦略 1は gxt にうまく統合されます。gxt の組み込みストアとバインドを使用できます。これは私が実稼働アプリケーションで使用した戦略であり、うまくいきましたが、クライアントとサーバーで Bean を複製するのは面倒です。個人的には、extjs (および gxt) のストア/バインド メカニズムが非常に複雑で、まれなケースでは拡張が難しいこともわかりました。
戦略 2:これは、次の gxt プロジェクトで使用する可能性が最も高い戦略です。欠点は、クライアントの gxt で独自のフォームとグリッド バインディングを行う必要があることです。ただし、利点は、すべての Bean/pojo を共有できることです。実装の詳細の概要は次のとおりです。
サーバー側の src ツリーで、.gwt.xml ファイルを、サーバーの pojo/bean クラスを含むルート パッケージに追加します。例: com.daveparoulek.gwt.server.models の下に「gwt-models.gwt.xml」という名前のこのファイルを作成しました。
<module rename-to='gwt-models'>
<inherits name='com.google.gwt.user.User' />
<source path="client" />
</module>
上記の例では、Bean は実際には com.daveparoulek.gwt.server.models.client 内にあります。
セットアップが完了したら、gwt クライアント プロジェクトの gwt.xml ファイルに「inherit」タグを追加して、src コードを com.daveparoulek.gwt.server.models 内に含めるようにクライアント gwt プロジェクトを構成できます。例:
<inherits name="com.daveparoulek.gwt.server.models" />
戦略 3: gwt に関する Google の講演をいくつか見た後、クライアント側でオブジェクトを処理する方法として、これが彼らの好ましい方法のようです。ただし、これにより、サーバー側の pojo/bean ごとに json オーバーレイ タイプが作成されます。これも gxt の世界に完全には適合しません。ここをクリックして、このコンセプトの紹介をご覧ください。
BeanModelFactoryは時間の無駄です。Senchaのヘルプドキュメントによると、静的get()
メソッドの呼び出しからBeanModelFactoryが返すものに対してgetFactoryを呼び出すことができます。getFactory()
彼らの例に従うと、この戻り値は、実装されていない(抽象)メソッドを持つBeanModelFactoryクラス自体のインスタンスであることがわかります。
したがって、どこからともなく素晴らしいnullポインタを取得できます。
私は戦略#1に固執します。
私は専門家ではありませんが、プロセスを容易にするためにGilead (チュートリアルがある) + GWT + GXT を使用しているようです。