XPages 数据源的默认范围(xp:dominoDocument 和 xp:dominoView)

Default Scope of XPages Data Sources (xp:dominoDocument and xp:dominoView)

xp:dominoDocument 数据源的默认范围是什么?

Sven Hasselbach 发布了另一个问题的答案,他说您必须将数据源的范围设置为 request 范围,他的答案解决了问题How can I refresh the XPages File Download Control and have it display updated attachments without full page refresh?

我对 xp:dominoDocument 数据源的默认范围的经验是,默认范围是 request 范围。我正在使用托管 bean 和托管属性。当我将 xp:dominoDocument 数据源作为托管 属性 注入托管 bean 时,我必须将此托管 bean 的范围设置为 request 范围。

否则(例如托管 bean 范围设置为 view)我收到以下错误:

27.05.2015 13:04:55 HTTP JVM: Managedbean fileUploadHandler could not be created The scope of the referenced object: '#{currentDocument}' is shorter than the referring object. For more detailed information, please consult error-log-0.xml located in d:/Lotus/Domino/d

是的,dominoDocument 和 dominoView 的范围仅限于请求,正如来自 OpenNTF 的 Mark Leusink 的调试工具栏所证实的那样。

如果您想使用数据源,避免使用托管 属性 可能更容易。您仍然可以将数据源添加到页面,但可以通过 ExtLibUtil.resolveVariable(ExtLibUtil.getXspContext().getFacesContext(), "document1"); 访问它或从其容器向下导航到它。或者,您可以使用文档 UNID、表单等的托管属性,并在 bean 的构造函数中或在 getter.

中检查 null 后实例化一个 com.ibm.xsp.model.domino.DominoDocumentData

数据源对象将始终位于请求范围内。您要更改的是数据源的数据容器的行为,默认情况下在视图范围内。

使用调试工具栏时,您可以看到这样的行为:即使将数据源的范围设置为应用程序范围,您仍然可以在请求范围内找到数据源。但是您还会在应用程序范围内找到一个 DominoDocumentDataContainer 实例。

如果将范围设置为request,数据容器也在请求范围内。这就是 "file upload trick" 起作用的原因。