我正在使用xpages(8.5.3 FP3 UP1)创建学生作业提交申请。详情如下:
学生可以提交任意数量的作品。对于每次提交,将创建一个唯一的SubmitID。现在,
一个。表格(提交) - 仅限2个字段(SubmitID,SoftCopy-RTF类型)
湾查看(提交) - 仅限2列(SubmitID,AttachmentNames)
℃。 SubmitID的示例是:submit1,submit2
对于每次提交,学生必须选择提交的课程/科目(例如:数学,物理等)。因此,我已经为教师创建了另一个表格来创建主题列表
一个。表格(主题) - 仅限1个字段(SubjectName)
湾视图(主题) - 仅限1列(主题名称)
℃。说现在已经创建了2个主题 - 数学与数学物理
我创建了2个xpage:
一个。 Submit.xsp - 创建新提交(使用表单 - 提交)
湾SubmitView.xsp - 显示提交列表(使用视图 - 提交)
对于Submit.xsp,这是我的问题开始的地方:
一个。这里的控件如下:SubmitID EditBox,Repeat Control(里面是CheckBox,fileUpload和fileDownload)
湾重复基于可用主题列表。 CheckBox标题将是每个SubjectName。在fileUpload控件的OnChange事件中,每次浏览文件后,都会选中复选框,这样就可以了。
℃。 fileUpload应该只更新附带的fileDownload,而是我刚刚上传的附件反映到每个其他fileDownload控件。我正在对fileUpload OnChange进行全面刷新,因为这是更新fileDownload的唯一方法。这里有什么问题,我该怎么做才能得到我想要的结果?保存文档并稍后在只读或编辑模式下打开它是很好的,尽管每个主题仍然显示相同的上传文件列表。 fileUpload和fileDownload都绑定到SoftCopy字段。
答案 0 :(得分:3)
除非我没有正确解释您的描述,否则您将多个上传/下载控件绑定到同一项目(“SoftCopy”)。由于这些控件始终绑定到某个项目而不是彼此绑定,因此下载控件将显示存储在源项目中的所有附件,无论它们是如何到达的。要将下载控件中附件的显示限制为通过特定上传控件发送的附件,必须将它们存储在该对唯一的项目中。
例如,如果每对绑定到特定于主题的项目,例如“SoftCopy_Maths”或“SoftCopy_Physics”,则每次下载仅显示存储在该特定项目中的附件。您不知道将定义哪些主题,因此您无法在表单上定义这些字段,但这没关系......您不需要。 NSF没有模式,因此不需要在表单上定义字段以使控件绑定到该字段;即使表单未定义文档,也会在保存文档时创建项目。严格地说,甚至表格本身也不存在。
我们通常使用点语法将控件绑定到项目,例如#{currentDocument.SoftCopy}
,但数组语法同样有效,例如#{currentDocument["SoftCopy"]}
。因此,如果将这些控件包装在将动态项名称建立为变量或属性的内容中,则可以使用数组语法来定位该动态项。执行此操作的两种最佳方法是数据上下文和自定义控件。
例如,您可以在面板中包围repeat的内容,并定义特定于面板的dataContext,它将变量attachmentItemName
与项目名称前缀和特定主题的串联相关联。然后,您的上传和下载控件可以绑定到#{currentDocument[attachmentItemName]}
。
或者,您可以将相同的内容移动到接受数据源和项目名称作为属性的自定义控件,在这种情况下,您的值绑定可能看起来像#{compositeData.dataSource[compositeData.attachmentItemName]}
。
除了运行时性能的微小差异外,这两种方法同样有效。