72. XPages的文档数据源

2024-02-01 18:48
文章标签 文档 数据源 72 xpages

本文主要是介绍72. XPages的文档数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在经典的Lotus Notes应用程序开发中,表单与Notes文档密不可分,在位于表单的代码里获取当前文档几乎是后续所有操作和运算的起点。在XPages里,页面和数据虽然在架构上是分开的,但是一个用作表单的XPage的数据源通常还是一个Notes文档,只不过在SSJS里可以直接使用的document1等变量对应的是一个Java的com.ibm.xsp.model.domino.wrapped.DominoDocument对象。如果只用SSJS编程,这些变量具有和LotusScript里NotesDocument类似的方法可以读写字段。但如果要用Java开发,很多人已经习惯了使用lotus.domino包【注1】里的类,它们与LotusScript里的Notes类有几乎一一对应的属性和方法。那么怎样从一个设定了数据源为一个Domino文档的XPage获取代表该文档的lotus.domino.Document类型的Java对象呢?笔者写了如下的工具方法,可以在managedbean里调用:

	public static Document getCurrentDocument() throws Exception{UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot();for (DataSource ds : view.getData()){if (ds instanceof DominoDocumentData){DominoDocumentData ddd=(DominoDocumentData) ds;DominoDocument dd=(DominoDocument) ddd.getDataObject();return dd.getDocument();}}throw new AppException("No document data source is found.");}

UIViewRootEx2 view是代表整个XPage的视图对象,它的getData()方法返回该页面添加的所有数据源,这些对象都实现了com.ibm.xsp.model.DataSource接口。如果添加了一个Domino文档,就会产生一个类型为com.ibm.xsp.model.domino.DominoDocumentData的对象,从这个数据源对象的getDataObject()方法可以返回一个com.ibm.xsp.model.domino.wrapped.DominoDocument对象,从它的getDocument()方法才能最终得到我们想要的lotus.domino.Document对象。如果当前XPage没有添加任何Domino文档数据源,则抛出一个自定义的异常AppException(简单扩展Exception,统一标志自定义的异常)。

com.ibm.xsp.model.domino.wrapped.DominoDocument类(以后简称DominoDocument)从名称就显示了它是一个包装器(wrapper),实际上它也确实是XPages对lotus.domino.Document类(以后简称Document)的包装,因为Document类不能满足在一个XPage上作数据源的要求,XPages构建了一个复杂的类和接口的层次【注2】,Document只是在最底层作为和Lotus Domino平台的接口读写文档的数据,最上层的com.ibm.xsp.model.domino.DominoDocumentData类作为数据源,和它绑定的各个表单控件从中读写数据,还要在同一页面每次被提交后和视图一道恢复状态。因此,在XPages环境下用Java编程时,不少情况用DominoDocument比Document更合适。比如用户填写了一个XPage表单后,点击一个按钮触发managed bean里的事件代码,在业务逻辑里读取用户输入的字段值,修改和保存表单背后的Domino文档时,就都应该调用DominoDocument的相应方法,而不能用Document,因为与在Lotus Notes客户端NotesDocument的各字段动态获得用户的输入值不同,在XPages里更新的是DominoDocument对象,而不是底层的Document。所以只有从DominoDocument对象才能获得用户输入的值;保存时如果直接调用Document的save方法,则会丢失用户的修改;若要修改文档,也要使用DominoDocument对象,否则在调用DominoDocument的save方法时,Document上做的修改会被DominoDocument对应的字段值覆盖掉。既然我们要经常获得和使用这个DocuminoDocument对象,也就应该像Document一样写一个工具方法:

	public static DominoDocument getCurrentDominoDocument() throws Exception{UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot();for (DataSource ds : view.getData()){if (ds instanceof DominoDocumentData){DominoDocumentData ddd=(DominoDocumentData) ds;return (DominoDocument) ddd.getDataObject();}}throw new AppException("No document data source is found.");}

有了这个对象我们就可以像下面这样读取修改和保存文档数据源。

		DominoDocumentData domDoc=XSPUtil.getCurrentDominoDocument();String status = domDoc.getItemValueString("Status");domDoc.replaceItemValue("Action", "");domDoc.save();

注1:lotus.domino包随R5发布,自那以后Java访问Lotus Domino对象都是藉由其中的类, XPages API里有关Domino对象的类也是依靠调用lotus.domino包。

 

注2:下面只是列举了XPages API里与Domino文档数据源相关的部分类和接口的层次:

Classcom.ibm.xsp.model.domino.DominoDocumentData

 java.lang.Object

 extended by com.ibm.xsp.complex.ValueBindingObjectImpl

     extended by com.ibm.xsp.model.AbstractDataSource

         extended by com.ibm.xsp.model.AbstractDocumentDataSource

              extended by com.ibm.xsp.model.domino.DominoDocumentData

All Implemented Interfaces:

ComponentBindingObject,ValueBindingObject, DataPublishingObject, DataSource, DocumentDataSource,javax.faces.component.StateHolder

 

Classcom.ibm.xsp.model.domino.wrapped.DominoDocument

java.lang.Object

 extended by com.ibm.xsp.model.domino.wrapped.DominoDocument

All Implemented Interfaces:

   com.ibm.xsp.model.DataObject, java.io.Serializable

这篇关于72. XPages的文档数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668135

相关文章

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Python脚本:TXT文档行数统计

count = 0 #计数变量file_dirs = input('请输入您要统计的文件根路径:')filename = open(file_dirs,'r') #以只读方式打开文件file_contents = filename.read() #读取文档内容到file_contentsfor file_content in file_contents:

bcolz文档

原文:http://bcolz.blosc.org/en/latest/reference.html First level variables bcolz.__version__'''bcolz包的版本。''' bcolz.dask_here'''是否检测到dask的最低版本。''' bcolz.min_dask_version'''需要dask的最低版本(dask是可选

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

Python知识点:使用Python进行PDF文档处理

使用 Python 进行 PDF 文档处理可以通过多种库来实现,包括 PyPDF2、pdfplumber、reportlab、pdfminer 等。这些库可以处理不同的 PDF 任务,例如 提取文本、拆分合并 PDF、修改 PDF、生成 PDF 等。以下是几种常见操作及对应的库和代码示例。 1. 安装常用库 首先,安装常用的 PDF 处理库: pip install PyPDF2 pdfpl