0

我正在使用 xpages (8.5.3 FP3 UP1) 创建一个学生作业提交应用程序。详情如下:

  1. 学生可以进行任意数量的提交。对于每个提交,将创建一个唯一的 SubmitID。目前,

    一个。表单(提交) - 仅 2 个字段(SubmitID,SoftCopy-RTF 类型)

    湾。视图(提交) - 仅 2 列(提交 ID、附件名称)

    C。SubmitID 的示例有:submit1、submit2

  2. 对于每次提交,学生必须选择提交的课程/科目(例如:数学、物理等)。因此我已经为老师创建了另一个表格来创建主题列表

    一个。表格(主题) - 仅 1 个字段(主题名称)

    湾。视图(主题) - 仅 1 列(主题名称)

    C。现在说 2 个科目已创建 - 数学和物理

  3. 我创建了 2 个 xpage:

    一个。Submit.xsp - 创建新的提交(使用表单 - 提交)

    湾。SubmitView.xsp - 显示提交列表(使用视图 - 提交)

  4. 对于 Submit.xsp,这是我的问题开始的地方:

    一个。这里的控件如下:SubmitID EditBox,Repeat Control(里面是一个CheckBox,一个fileUpload,一个fileDownload)

    湾。重复基于可用主题列表。CheckBox 标题将是每个 SubjectName。在 fileUpload 控件的 OnChange 事件中,每次浏览文件后,都会选中该复选框并且这有效。

    C。fileUpload 应该只更新随附的 fileDownload,但我刚刚上传的附件会反映到所有其他 fileDownload 控件。我正在对 fileUpload OnChange 进行全面刷新,因为这是更新 fileDownload 的唯一方法。这里有什么问题,我应该怎么做才能得到我想要的结果?保存文档并稍后以只读或编辑模式打开它都很好,尽管每个主题仍然显示相同的上传文件列表。fileUpload 和 fileDownload 都绑定到 SoftCopy 字段。

4

1 回答 1

3

除非我没有正确解释您的描述,否则您将多个上传/下载控件绑定到同一个项目(“SoftCopy”)。因为这些控件始终绑定到一个项目,而不是彼此绑定,所以下载控件将显示存储在源项目中的任何附件,无论它们是如何到达那里的。要将下载控件中的附件显示限制为通过特定上传控件发送的附件,它们必须存储在该对的唯一项目中。

例如,如果每一对都绑定到特定主题的项目,例如“SoftCopy_Maths”或“SoftCopy_Physics”,那么每次下载将仅显示存储在该特定项目中的附件。您不知道将定义哪些主题,因此您无法在表单上定义这些字段,但这没关系……您不需要。NSF 没有模式,因此不需要在表单上定义字段以将控件绑定到它;该项目将在保存文档时创建,即使表单没有定义它。严格来说,甚至形式本身也不需要存在。

我们通常使用点语法将控件绑定到项目,例如#{currentDocument.SoftCopy},但数组语法同样有效,例如#{currentDocument["SoftCopy"]}。因此,如果您将这些控件包装在将动态项名称建立为变量或属性的东西中,则可以使用数组语法来定位该动态项。执行此操作的两种最佳方法是数据上下文和自定义控件。

例如,您可以将重复的内容包围在面板中,并定义面板特定的 dataContext 将变量attachmentItemName与项目名称前缀和特定主题的连接关联起来。然后可以将您的上传和下载控件绑定到#{currentDocument[attachmentItemName]}.

或者,您可以将相同的内容移动到接受数据源和项目名称作为属性的自定义控件,在这种情况下,您的值绑定可能看起来像#{compositeData.dataSource[compositeData.attachmentItemName]}.

除了运行时性能的微小差异外,任何一种方法都同样有效。

于 2013-03-25T06:54:20.973 回答