在用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.getVariableva lue("session");
return DominoUtils.getCurrentSession();
}
public static Session getSessionAsSigner(){
return (Session) JSFUtil.getVariableva lue("sessionAsSigner");
}
public static Database getDatabase() throws NotesException{
return getSession().getCurrentDatabase();
//return (Database) JSFUtil.getVariableva lue("database");
}
p
ublic 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.getVariableva lue("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