今朝、私はこの質問をして、本当に素晴らしい答えを受け取りました. 現在、デザインのプロトタイプを作成しようとしていますが、同様の (ただし同じではない) 問題が発生しています。基本的に、私は 100% 構成主導型の GWT UI を作ろうとしています。DB を変更すると、根本的に異なる UI を生成できますが、コードを変更する必要はありません。
私のアーキテクチャは単純です:
- 別のツールを使用して (または最初は手動で) .xul (XUL) ファイルを作成し、データベースに保存します。おそらく Mongo などのドキュメント データベース
- サーバー側で
XulParser
は、データベースから XUL ファイルを読み取り、それをContainerProxy
インスタンス に変換する を記述します。- Aは、 aまたは類似のもの
ContainerProxy
に相当する私の「プロキシ」です。com.google.gwt.user.client.ui.Panel
これは、他のウィジェット プロキシのリストを含む単なる Bean/POJO です (以下のコード スニペットを参照)。 - たとえば、次の
Button
ようなものを定義する XUL ファイルがあるとします。 - これは(同じコンテナー/ビュー/パネル内の他の UI ウィジェットと共に) に
ButtonProxy
追加されます。ContainerProxy
- Aは、 aまたは類似のもの
- クライアント側では、
ContainerProxy
どういうわけか (???)を照会し、サーバーからプルダウンします。 ContainerProxy
次に、の各子 (ButtonProxy
など) を実際の UI ウィジェットに変換するメカニズムを作成します。
このようにして、最初に特定の XUL ファイルをデータベースに入れることができ、UI には「今すぐ注文」ボタンしか含まれていない場合があります。しかし将来的には、まったく別の UI を使用したくなるかもしれないので、別の XUL ファイルを設計し、データベース内のドキュメントを更新すると、ほら、コードを変更することなく、すべてのユーザーの UI が変更されます。注: これは通常の方法ではないことは理解しています。このような構成駆動型の UI が必要な特別なユース ケースがあります。
XUL 解析プロセスを明確にするために、次のようにします。
<button id="order" label="orderNow" clickHandler="org.myapp.OrderButtonHandler" />
after the XulParser reads the above snippet, we get:
ButtonProxy orderButton = new ButtonProxy("order", "OrderNow");
orderButton.addClickHandler(new OrderButtonHandler());
とにかく、私の質問:
- をクエリするには、クライアント側で何をする必要があります
ContainerProxy
か? 視覚化するのに役立つ疑似コードを提供できる人はいますか? ContainerProxy
クライアント側で を取得したら、プロキシされたクラスを実際の UI ウィジェットに変換するために使用できる UI メカニズムは何ですか? UIBinder は利用できますか? 繰り返しますが、誰かが疑似コードを提供できますか?
ここで助けてくれてありがとう!