2013-03-25 70 views
0

我使用xpages(8.5.3 FP3 UP1)创建学生作业提交应用程序。详情如下:重复的fileDownload控件每个都显示相同的文件列表?

  1. 学生可以做任何数量的提交。对于每个提交,都会创建一个唯一的SubmitID。目前,

    a。 Form(提交) - 仅限2个字段(SubmitID,SoftCopy-RTF类型)

    b。仅查看(提交) - 2列(SubmitID,附件名称)

    c。 SubmitID的示例如下:submit1,submit2

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

    a。表格(主题) - 1字段(SubjectName)

    b。查看(主题) - 仅1列(SubjectName)

    c。说现在2主题已经建立 - 数学物理&

  3. 我创建2的XPage:

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

    b。 SubmitView.xsp - 显示提交的名单(使用视图 - 提交)

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

    一个。这里的控件如下:SubmitID EditBox,重复控制(里面是复选框,文件上传和文件下载)

    b。重复是基于可用主题的列表。 CheckBox标题将是每个SubjectName。在fileUpload控件的OnChange事件中,每次浏览一个文件后,该复选框都会被检查并且工作。

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

回答

3

除非我没有正确解释您的描述,否则您将多个上传/下载控件绑定到同一项目(“SoftCopy”)。因为这些控件总是绑定到一个项目上,而不是彼此绑定,所以下载控件将显示存储在源项目中的所有附件,而不管它们如何到达那里。要将下载控件中附件的显示限制为通过特定上传控件发送的附件,必须将其存储在该对中唯一的项目中。例如,如果每个对都绑定到特定主题的项目,例如“SoftCopy_Maths”或“SoftCopy_Physics”,则每个下载只会显示存储在该特定项目中的附件。你不知道哪些主题将被定义,所以你不能在表单上定义这些字段,但没关系......你不需要。 NSF没有模式,所以不需要在窗体上定义一个字段来绑定控件;该项目将在保存文档时创建,即使表单未定义它。严格地说,即使形式本身也不需要存在。

我们通常使用点语法将控件绑定到项目,例如, #{currentDocument.SoftCopy},但是数组语法同样有效,例如, #{currentDocument["SoftCopy"]}。因此,如果您将这些控件包含在将动态项目名称建立为变量或属性的东西中,则可以使用数组语法来定位该动态项目。两种最好的方法是数据上下文和自定义控件。例如,您可以在面板中围绕重复的内容,并定义面板特定的dataContext,将变量attachmentItemName与项目名称前缀和特定主题的连接关联起来。您的上传和下载控件可以绑定到#{currentDocument[attachmentItemName]}

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

除了运行时性能上的细微差别之外,两种方法都是同样有效的。

相关问题