4

Java のみを使用した XPage 開発への移行。XPage をフォームにまとめて、すべての UI コンポーネントをマネージド Bean にバインドすることに成功しました。Bean に save メソッドを作成しました。XPage を送信できます。ドキュメントが作成され、Bean の現在の値で完全に更新された後、ブラウザーに XPage が表示されます。[保存] を繰り返しクリックすると、常に新しいドキュメントが作成され、最初に作成されたドキュメントは更新されません。

私の質問は、XPage を現在のドキュメントにマップして、Bean が常に新しいドキュメントを作成するのではなく、常にドキュメントを更新する適切な方法は何ですか?

Bean メンバー Document を作成して、初めてドキュメントを保存するときにハンドルを保持する必要がありますか? 作成後に doc オブジェクトをリサイクルしないということですか?

unid を保存するたびにドキュメントを検索する必要がありますか? パフォーマンスの問題?

良いプログラミングパターンを持っている人はいますか? Notes 9 を使用すると、XPage でデータ ソースが定義されません。

4

4 に答える 4

0

私が正しく理解している場合、毎回新しいドキュメントを作成する理由は、Bean がどのドキュメントを扱っているかという概念を持っていないためです。XPage 上の dominoDocument データソースでは、これはデータソースの action および documentId プロパティによって処理されます。したがって、そのデータソースで save メソッドを呼び出すと、バックエンド データベースに保存されるだけでなく、データソースの action プロパティと documentId プロパティも更新されます。その結果、documentId が空の文字列から、作成されたバックエンド ドキュメントの UNID に変更されているため、今後のアクションでは、どのドキュメントを操作する必要があるかがわかります。また、アクションが「createDocument」から「editDocument」に変更されました。

Bean を使用している場合、save メソッドはそのプロセスをシミュレートし、操作するドキュメントの変数を設定する必要があります。次に、保存メソッドはそのプロパティに値があるかどうかを確認する必要があります。値がある場合は関連するドキュメントを取得し、そうでない場合は新しいドキュメントを作成します。そうしないと、Bean はドキュメントを作成することしかできず、ドキュメントを更新することはできません。

xe:dataObject を使用している場合を除き、submit タイプのボタンも使用しないでください。豆はそれをどうするかわかりません。ジョンは確認するでしょうが、MVC がそれをどうするかを知っているかどうかはわかりません。xe:dataObject には特定の saveObject プロパティがあります。通常のボタンを使用し、[イベント] タブで関連する保存方法を指定する方が簡単です。

Bean、xe:dataObject、MVC のいずれを使用する場合でも、ドキュメントを作成するタイミングと、更新のためにドキュメントを取得するタイミングと方法をコードに伝える必要があります。

于 2013-09-06T08:39:36.193 に答える
0

Philippe が Bean のライフサイクルについて述べたことに基づいて、Plain Old Java Object (POJO) を使用する方が適していると思います。次に、Bean がいつインスタンス化されるかを制御できます。それはまったく同じように機能しますが、自分で作成してリサイクルする必要があります。

私のプロジェクトでは、複数のドキュメントが必要だったのに、マネージド Bean を使用すると 1 つしか作成できないという反対の問題がありました。POJOに変えたらうまくいきました。新しいオブジェクトの作成を制御しました。

次のようにSSJSでオブジェクトを作成しました。それはうまく機能し、将来、すべてをこの方法で行うかもしれないと考えさせられます.

var s = new com.mycompany.Shipper(requestScope.field1, requestScope.field2, requestScope.field3, requestScope.field4, UNID1, UNID2);
s.saveShipper(POdata);
于 2013-09-05T20:27:48.413 に答える