2

ビューキーを使用してドキュメントにアクセスし、var"posts"を使用して繰り返し表示するビューデータソースがあります。リピート内に、posts.getUniversalID()を使用してドキュメントのunidを取得するvar"post"のドキュメントデータソースがあります。

繰り返しのさらに下に、応答である別のドキュメントデータソース「newcomment」があり、親IDを次のように取得します:post.getDocument()。getUniversalID()

newcommentデータソースの下に、編集ボックスと送信ボタンがあり、newcomment.save()を使用して「投稿」への応答としてコメントを保存します。

これが私の問題です

2人が同じxpageにアクセスします。personAがページに入り、投稿にコメントを書き始めます。同時に、personBは新しい投稿を作成し、personAがコメントを送信する前に送信します。今何が起こっているのかというと、コメントは、personAが応答した投稿ではなく、最新の投稿にバインドされます。

私も別のことを試しました。たとえば、そのデータベースに10件の投稿があるとします。personAとpersonBはxpagesにアクセスします。personAは投稿番号8にコメントを書き始めます。同時に、personBはデータベースに2つの新しい投稿を作成します。personAがコメントを送信すると、同じインデックスにバインドされているように見えます。これは2つの投稿になっています。しかし、それでもインデックス8。これはもちろん間違った投稿です。

リピートを「createControlsAtPageCreation」に変更すると、つまりrepeatControls = trueの場合、コメントは正しい投稿に添付されますが、ビューが更新されて最新の投稿が表示されないという別の問題が発生します。

私の繰り返しは、extlibの動的コンテンツコントロールを使用して動的にロードされるカスタムコントロールを使用しています。

ここでの情報は、repeatControls設定について私が見つけたものです。

  • repeatControlsプロパティをtrueに設定すると、データセットの反復ごとに子の新しいコピーを作成するように繰り返しコントロールに指示します。
  • リピートコントロールがプロパティrepeatControls=“ true”で構成されている場合、ページの読み込み時にその内容を1回だけ繰り返します。

ですから、ここでの私の質問は、何が起こっているのか理解していないということです。コメントが間違った親ドキュメントに添付されているのはなぜですか?これを防ぎ、新しい投稿を正しく表示する方法はありますか

ご協力いただきありがとうございます

4

2 に答える 2

1

コードがなければ、ここで何が起こっているのかを正確に想像するのは少し難しいですが、これは繰り返し制御と値バインディングで発生した問題と非常によく似ています。

簡単に言えば、問題は false に設定された repeatControls プロパティに接続されていました。データ バインディングがコレクションの最初の要素に対してのみ機能していた場合、すべてのデータが魔法のようにこの最初のオブジェクトに保存されました。動的コンテンツ コントロールの再構築と repeatControls を true に設定することで、これを機能させることができました。その時だけ、データバインディングは機能していました。

レンダリングのみを繰り返している場合 (repeatControls が false に設定されている場合)、jsf ライフサイクルのデコード フェーズは foobar になります。

于 2013-03-12T16:50:30.573 に答える
0

XSP マークアップがなければ、完全に決定的なものにすることは困難ですが、ページの読み込み中にアプリ コードがデータソースと行ごとのコンポーネントを作成して保持しているように見えます。そのため、コンポーネント ツリーの全体的なサイズと複雑さも増加しています。または、エンドユーザーから要求された場合にのみデータソースを遅延ロードするアプローチを試す必要があります (例: 編集 / 返信)。

このような動的アプローチを使用する例については、XPages Extension Library デモ アプリケーション (XPagesExt.nsf) を参照してください。特に、xp:repeat 内で xe:inPlaceForm コントロールを使用する方法を示す Core_InPlaceForm.xsp を見てください。また、xe:forumView および xe:forumPost コントロールを使用して階層スレッドを管理および視覚化する方法を示す Domino_ForumView.xsp も参照してください。また、特定の投稿またはコメント (fail、createConflict、force、exception) を実際に保存し、競合の多い状況でドキュメントをロックする場合に、要件に最も適した同時実行モードを検討してください。上記のコントロールはすべて、最高レベルの動的コントロールとデータソースの作成と破棄を提供します。

あなたの正確なユースケースを理解できる作業例データベースを私に送ってください - DM または電子メールで。

于 2013-03-19T11:58:36.703 に答える