`
从此醉
  • 浏览: 1117060 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

75. XPages中Java开发的一些有用方法

 
阅读更多
<style type="text/css">#article_content {font-family:Microsoft YaHei;}</style>

在用Java进行XPages开发时,有一些常见的基础性的任务。这些经常要做的事部分与在Lotus Notes客户端开发时遇到的相同,例如获得当前Session和数据库对象,但是达成的方法与用LotusScript截然不同;其它则是XPages开发环境特定的需求,比如获得当前com.ibm.xsp.designer.context.XSPContext和RequestMap对象(即RequestScope变量)。将这些频繁需要的任务以静态方法的形式写在一个工具类里是很好用的:

package starrow.xsp;

import java.lang.reflect.Method;
import java.util.*;

import javax.faces.context.FacesContext;

import starrow.AppException;

import lotus.domino.*;
import lotus.domino.local.NotesBase;
import com.acme.tools.JSFUtil;
import com.ibm.designer.runtime.directory.DirectoryUser;
import com.ibm.xsp.component.UIViewRootEx2;
import com.ibm.xsp.designer.context.XSPContext;
import com.ibm.xsp.model.DataSource;
import com.ibm.xsp.model.domino.DominoDocumentData;
import com.ibm.xsp.model.domino.DominoUtils;
import com.ibm.xsp.model.domino.wrapped.DominoDocument;

@SuppressWarnings("unchecked")
public class XSPUtil {
	public static Session getSession(){
		//return (Session) JSFUtil.getVariableValue("session");
		return DominoUtils.getCurrentSession();
	}
	
	public static Session getSessionAsSigner(){
		return (Session) JSFUtil.getVariableValue("sessionAsSigner");
	}

	public static Database getDatabase() throws NotesException{
		return getSession().getCurrentDatabase();
		//return (Database) JSFUtil.getVariableValue("database");
	}

	public static Database getDatabase(String dbPath) throws NotesException{
		String server=getDatabase().getServer();
		return getDatabase(server, dbPath);
	}

	public static Database getDatabase(String server, String dbPath) throws NotesException{
		return getSession().getDatabase(server, dbPath);
	}

	public static XSPContext getContext(){
		//return (XSPContext) JSFUtil.getVariableValue("context");
		FacesContext fc=FacesContext.getCurrentInstance();
		return XSPContext.getXSPContext(fc);
	}

	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.");
		//return null;		
	}
	
	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.");
		//return null;		
	}
	
	public static Object[] getRoles(){
		XSPContext context=XSPUtil.getContext();
		List userRoles=context.getUser().getRoles();
		return userRoles.toArray();
	}

	public static boolean hasRoles(String[] roles){
		XSPContext context=XSPUtil.getContext();
		List userRoles=context.getUser().getRoles();
		for (Object ur : userRoles){
			for (String r : roles){
				if (ur.toString().equals(r)){
					return true;
				}
			}
		}
		return false;
	}

	public static boolean hasRole(String role){
		String[] roles={role};
		return hasRoles(roles);
	}
	
	//returns a Vector<String> containing the name, groups and roles of the current user.
	public static Vector<String> getUserNamesList() throws NotesException{
		Vector<String> result=new Vector<String>();
		DirectoryUser user=getContext().getUser();
		//DirectoryUser.getFullName() returns the common name.
		//I can reproduce the issue in both 8.5.1-3.
		//For local preview, getFullName() returns Anonymous, getDistinguishedName() returns anonymous.
		result.add(getSession().getEffectiveUserName());
		result.addAll(user.getGroups());
		result.addAll(user.getRoles());
		return result;
	}
	
	
	public static Map getRequestMap(){
		return FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
	}
	
	public static void feedback(String msg){
		getRequestMap().put("message", msg);
	}
}

对这个工具类稍加说明:

feedback()将一个字符串消息传递到RequestMap里,以message键保存,供页面上的消息控件显示。此一约定的键和方法可被managed bean用于向前端反馈消息。

getContext()方法返回com.ibm.xsp.designer.context.XSPContext对象,XSPContext作为对FacesContext的扩展提供了一个XPage运行时的上下文信息。

getCurrentDocument()和getCurrentDominoDocument()方法分别返回当前Document和DominoDocument对象。

getDatabase()的三个重载方法分别依据参数返回当前数据库对象。

getRequestMap()方法返回代表RequestScope变量的java.util.Map对象。

getRoles()返回当前用户的所有角色。

getSession()和SessionAsSigner()分别返回当前Session和以程序签名者身份的Session对象。

getUserNamesList()模仿@UserNamesList函数,返回的Vector<String>包含当前用户的所有用户名、具有的角色和所属的群组。

hasRole()和hasRoles()分别判断当前用户是否具有给定的一个或者多个角色中任何一个。

程序中用到的AppException就是笔者以前提到的一个简单的Exception的扩展,用以创建自定义的异常。

package starrow;

public class AppException extends Exception {

	private static final long serialVersionUID = -143353750902427769L;

	public AppException(String message){
		super(message);
	}
}

com.acme.tools.JSFUtil来自以前的文章中也提到的KarstenLehmann的blog:http://www.mindoo.de/web/blog.nsf/dx/18.07.2009191738KLENAL.htm?opendocument




分享到:
评论

相关推荐

    domino xpages 调用java例子

    【标题】"Domino XPages调用Java例子"揭示了一个在IBM Domino开发环境中,使用XPages技术调用Java代码的实际应用场景。XPages是IBM Lotus Domino Designer中的一个功能,用于构建富互联网应用程序(RIA)。它允许...

    玩转XPages开发

    XPages开发

    XPages访问关系型数据库的方法.pdf

    XPages是一种基于Java的动态网页开发框架,它允许开发者利用JavaServer Faces (JSF) 和相关技术来构建高效的应用程序。XPages的一个重要特性就是可以直接访问关系型数据库。这种方式提供了灵活的数据访问能力,使得...

    《玩转XPages开发》配套资源

    "XPages.nsf"文件中的内容可能包括了上述各个知识点的实例,读者可以通过探索这个文件来加深对XPages开发的理解,动手实践书中所讲解的概念和技术。无论是初学者还是有经验的开发者,这些资源都能提供宝贵的实践机会...

    超全 Lotus Domino Xpages 开发资料——java和JDBC归类资料

    超全 Lotus Domino Xpages 开发资料——java和JDBC归类资料 大全通过分类提供给大家,请大家根据需要下载 全开源,并且一看就懂,不保留 https://blog.csdn.net/weijia3624/article/details/107013401

    XPages.Portable.Command.Guide

    XPages是一种基于Java的开发框架,由IBM Lotus Notes/Domino开发团队创造,用于构建企业级的应用程序。XPages的开发通常涉及到XSP(XML Server Pages)语言,它是一种用于简化Web应用程序开发的声明式标记语言,允许...

    domino xpages开发 清除缓存方法

    domino xpages开发 清除缓存方法

    domino xpages 开发 视图View Start Key

    在 Domino XPages 开发中,视图(View)是一个非常重要的组件,用于显示和管理数据。在 XPages 8.5.2 中,startKeys 属性是一个非常有用的功能,它允许开发者设置视图中首先显示的数据行。本文将详细介绍 startKeys ...

    domino xpages免费讲课第二课

    【标题】"Domino XPages 免费讲课第二课"主要涵盖了XPages开发中的关键控件及其使用,包括编辑控件、选择控件、文件处理控件,以及如何利用开源库增强XPages应用的功能。这一课程是对于Domino平台上的Web应用开发...

    Harness the power of XPages in Lotus Domino

    尽管教程涵盖了XPages开发的一些基本和核心主题,但它假设读者已经掌握了常见的Domino Web应用开发技巧。 #### 3.2 关于教程 XPages能力是最新加入的Domino浏览器客户端设计元素,它不仅扩展了现有IBM Lotus Notes...

    精通Xpages书本的配套练习题

    Xpages是IBM Lotus Domino开发平台中的一个重要组成部分,用于构建富客户端和Web应用程序。它基于Java和JavaScript技术,提供了一个直观的界面来设计、构建和管理动态的、交互式的Web应用。"精通Xpages书本的配套...

    玩转Xpages开发资料

    模板资料库文件,本实例系统介绍xpages的功能及用法,具有十分重要的参考价值.

    xpages jdbc

    XPages是一种基于Java和Ajax技术的开发环境,它扩展了Lotus Domino Designer的功能,允许开发者创建富客户端Web应用。XPages提供了一种声明式的方法来设计用户界面,同时支持服务器端的JavaScript和Java代码来处理...

    domino xpages 开发 获取服务器时间

    在 Domino XPages 开发中,获取服务器时间是一个常见的需求,特别是在构建实时或者基于时间敏感的应用时。`Domino XPages` 提供了多种方法来获取服务器的当前时间,其中一个方法是通过 `IsTrackMillisecInJavaDates`...

    domino xpages 开发 获取附件

    在 Domino XPages 开发中,获取附件是一个常见的需求。本文将介绍如何使用 XPages 获取附件,并提供相应的代码实例。 获取附件的必要性 在 Domino 应用程序中,附件是指在富文本字段中存储的文件,这些文件可以是...

    xpages开发免费课程第四课

    在本节“xpages开发免费课程第四课”中,我们将深入探讨XPages开发中的关键概念,特别是关于服务器端JavaScript(ssjs)和客户端JavaScript(csjs)的编写与应用,以及如何有效地调试这两种脚本语言。同时,我们还将...

    domino xpages 开发 文档处理综合例子

    在Lotus Domino XPages开发中,文档处理是核心任务之一,因为它涉及到应用程序的数据存储和交互。XPages提供了一个丰富的框架,允许开发者以直观的方式与Lotus Domino文档数据库进行交互。以下是一些关于“Domino ...

    domino xpages 文档开发 onload加载和其它方法

    在Domino XPages开发中,理解并掌握文档加载和各种事件处理方法对于创建高效、响应式的用户界面至关重要。本文将详细探讨`onload`加载事件以及其他相关JavaScript方法,特别是如何在XPages环境中有效地使用它们。 ...

    domino xpages 开发 附件显示序号和中文

    在Domino XPages开发中,显示附件序号和中文名称是一项常见的需求,这有助于用户更清晰地查看和管理附件。XPages是一种基于Java和JavaScript的框架,用于构建IBM Domino应用程序的用户界面。在这个场景中,我们看到...

Global site tag (gtag.js) - Google Analytics