0

xpages(8.5.3 FP3 UP1)を使用して学生課題提出アプリケーションを作成しています。詳細は次のとおりです。

  1. 学生は任意の数の提出を行うことができます。送信ごとに、一意のSubmitIDが作成されます。今のところ、

    a。フォーム(送信)-2つのフィールドのみ(送信ID、SoftCopy-RTFタイプ)

    b。ビュー(送信)-2列のみ(送信ID、添付ファイル名)

    c。SubmitIDの例は次のとおりです:submit1、submit2

  2. 提出物ごとに、学生はその提出物の対象となるコース/科目を選択する必要があります(例:数学、物理学など)。したがって、教師が主題のリストを作成するための別のフォームをすでに作成しました

    a。フォーム(件名)-1フィールドのみ(件名)

    b。ビュー(件名)-1列のみ(件名)

    c。今のところ2つの主題が作成されたと言う-数学と物理学

  3. 2つのxpageを作成しました:

    a。Submit.xsp-新しい送信を作成するには(フォームを使用-送信)

    b。SubmitView.xsp-送信のリストを表示します(ビューを使用-送信)

  4. Submit.xspの場合、ここから問題が始まります。

    a。ここでのコントロールは次のとおりです。SubmitIDEditBox、Repeat Control(内部にはCheckBox、fileUpload、およびfileDownloadがあります)

    b。リピートは、利用可能な主題のリストに基づいています。チェックボックスのタイトルは、各SubjectNameになります。fileUploadコントロールのOnChangeイベントでは、ファイルが参照されるたびに、チェックボックスがオンになり、これが機能します。

    c。fileUploadは、付随するfileDownloadのみを更新する必要がありますが、代わりに、アップロードしたばかりの添付ファイルが他のすべてのfileDownloadコントロールに反映されます。fileDownloadを更新する唯一の方法であるため、fileUploadOnChangeを完全に更新しています。ここで何が間違っているのでしょうか。また、希望する結果を得るにはどうすればよいですか。ドキュメントを保存し、後で読み取り専用モードまたは編集モードの両方で開くことは問題ありませんが、各サブジェクトにはアップロードされたファイルの同じリストが表示されます。fileUploadとfileDownloadの両方がSoftCopyフィールドにバインドされます。

4

1 に答える 1

3

私があなたの説明を正しく解釈していない限り、あなたは複数のアップロード/ダウンロードコントロールを同じアイテム(「ソフトコピー」)にバインドしています。これらのコントロールは常にアイテムにバインドされており、相互にバインドされていないため、ダウンロードコントロールには、ソースアイテムへのアクセス方法に関係なく、ソースアイテム内に保存されている添付ファイルが表示されます。ダウンロードコントロールでの添付ファイルの表示を特定のアップロードコントロールを介して送信されたものに制限するには、それらをそのペアに固有のアイテムに保存する必要があります。

たとえば、各ペアが「SoftCopy_Maths」や「SoftCopy_Physics」などのサブジェクト固有のアイテムにバインドされている場合、各ダウンロードには、その特定のアイテム内に保存されている添付ファイルのみが表示されます。どのサブジェクトが定義されるかわからないため、フォームでこれらのフィールドを定義することはできませんが、それは問題ありません...必要はありません。NSFにはスキーマがないため、コントロールをフォームにバインドするためにフィールドをフォームに定義する必要はありません。フォームで定義されていない場合でも、アイテムはドキュメントの保存時に作成されます。厳密に言えば、フォーム自体も存在する必要はありません。

通常、ドット構文を使用してコントロールをアイテムにバインドします#{currentDocument.SoftCopy}が、配列構文も同様に有効です#{currentDocument["SoftCopy"]}。したがって、動的アイテム名を変数またはプロパティとして確立するものでこれらのコントロールをラップする場合は、配列構文を使用してその動的アイテムをターゲットにすることができます。これを行うための最良の方法の2つは、データコンテキストとカスタムコントロールです。

たとえば、繰り返しの内容をパネルで囲み、変数attachmentItemNameをアイテム名プレフィックスと特定のサブジェクトの連結に関連付けるパネル固有のdataContextを定義できます。その後、アップロードとダウンロードのコントロールをにバインドできます#{currentDocument[attachmentItemName]}

または、同じコンテンツを、データソースとアイテム名をプロパティとして受け入れるカスタムコントロールに移動することもできます。この場合、値のバインドはのようになります#{compositeData.dataSource[compositeData.attachmentItemName]}

実行時のパフォーマンスのごくわずかな違いは別として、どちらのアプローチも同様に有効です。

于 2013-03-25T06:54:20.973 に答える