在Domino平台上应用Java 反射机制
2017-05-09 11:20
441 查看
Domino平台的数据库是一种文本数据库,其实也就是一种NOSQL型数据库,不需要严格的数据库表格式定义。这倒是为我们应用Java的反射机制提供了一些方便。首先我们要用到Domino的MBean。
所谓的MBean应该称为Managed-Bean,就是托管Bean。这是JSF的一个概念,在Domino851之后就已经提供支持了。我们正好可以利用它。
在Designer中,切换至Java透视图,在左侧的包浏览器找到WebContent文件夹:
打开faces-config.xml,在<faces-config>这个标签内增加:
<managed-bean>
<managed-bean-name>DocumentBean</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>form</property-name>
<value>DocBean</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>DocumentControl</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentControl</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean> 标签增加完了,千万不要忘了编写Bean实体。
package xpage.bean;
package xpage.bean;
public interface DocumentInterface {
//public boolean print();
public String getForm();
}
public class DocumentBean implements DocumentInterface {
private String form = \"\";
private String fullname =\"\";
private String subject = \"\";
private String title = \"\";
private String uuid = \"\";
private int num = 1;
private boolean saved = true;
public DocumentBean(){
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public boolean isSaved() {
return saved;
}
public void setSaved(boolean saved) {
this.saved = saved;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getForm() {
return form;
}
public void setForm(String form) {
this.form = form;
}
public String getTitle() {
return title;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setTitle(String title) {
this.title = title;
}
} 这样在整个session期,DocumentBean对象实体都是可以访问的,而且是不需要开发人员去创建而是由服务器托管的,这也是managed一词的来由。但是问题来了,怎么用啊?我们看XML配置中的<managed-bean-name>属性,这个是MBbean的名称,就相当于对象名。我们在Xpage或者SSJS中直接引用它就可以使用这个bean,下面就具体来讲讲。
先创建一个Xpage页面,在里边添加三个文本框,分别是subject,title,form。编辑form文本框的默认值属性,改为计算值:
然后在浏览器中打开
能看到form字段的默认值已经取到了,就是XML文件中配置的数据。以上可以看到MBean作为实体是存在于内存中的,并不需要用户去创建。那么在SSJS中那?也很简单:直接用:DocumentBean.form。在页面的事件中(随便一个),输入:
var sform = DocumentBean.form;
print(sform);
然后刷新浏览器页面,会在控制台中显示:DocBean
MBean此时就可以在我们的设计下发挥它自己的作用了。但是现在还只是能借助MBean取数据,事实是,我们更想通过它保存数据。Dominont的数据库是一种文档数据库,那也就是说没有严格的库表结构,同一种文档里的字段可以完全不一样。这给我们利用反射保存和引用数据提供了方便。
继续编辑文件。在里边增加一个MBean:DocumentControl
<managed-bean>
<managed-bean-name>DocumentControl</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentControl</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
try{
DocumentBean.fullname = session.getEffectiveUserName();
DocumentBean.subject = getComponent(\"subject\").getValue();
DocumentBean.title = getComponent(\"title\").getValue();
DocumentControl.save(DocumentBean);
}catch(e){
_dump(e)
}finally{
}
所谓的MBean应该称为Managed-Bean,就是托管Bean。这是JSF的一个概念,在Domino851之后就已经提供支持了。我们正好可以利用它。
在Designer中,切换至Java透视图,在左侧的包浏览器找到WebContent文件夹:
打开faces-config.xml,在<faces-config>这个标签内增加:
<managed-bean>
<managed-bean-name>DocumentBean</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>form</property-name>
<value>DocBean</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>DocumentControl</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentControl</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean> 标签增加完了,千万不要忘了编写Bean实体。
package xpage.bean;
package xpage.bean;
public interface DocumentInterface {
//public boolean print();
public String getForm();
}
public class DocumentBean implements DocumentInterface {
private String form = \"\";
private String fullname =\"\";
private String subject = \"\";
private String title = \"\";
private String uuid = \"\";
private int num = 1;
private boolean saved = true;
public DocumentBean(){
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public boolean isSaved() {
return saved;
}
public void setSaved(boolean saved) {
this.saved = saved;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getForm() {
return form;
}
public void setForm(String form) {
this.form = form;
}
public String getTitle() {
return title;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setTitle(String title) {
this.title = title;
}
} 这样在整个session期,DocumentBean对象实体都是可以访问的,而且是不需要开发人员去创建而是由服务器托管的,这也是managed一词的来由。但是问题来了,怎么用啊?我们看XML配置中的<managed-bean-name>属性,这个是MBbean的名称,就相当于对象名。我们在Xpage或者SSJS中直接引用它就可以使用这个bean,下面就具体来讲讲。
先创建一个Xpage页面,在里边添加三个文本框,分别是subject,title,form。编辑form文本框的默认值属性,改为计算值:
然后在浏览器中打开
能看到form字段的默认值已经取到了,就是XML文件中配置的数据。以上可以看到MBean作为实体是存在于内存中的,并不需要用户去创建。那么在SSJS中那?也很简单:直接用:DocumentBean.form。在页面的事件中(随便一个),输入:
var sform = DocumentBean.form;
print(sform);
然后刷新浏览器页面,会在控制台中显示:DocBean
MBean此时就可以在我们的设计下发挥它自己的作用了。但是现在还只是能借助MBean取数据,事实是,我们更想通过它保存数据。Dominont的数据库是一种文档数据库,那也就是说没有严格的库表结构,同一种文档里的字段可以完全不一样。这给我们利用反射保存和引用数据提供了方便。
继续编辑文件。在里边增加一个MBean:DocumentControl
<managed-bean>
<managed-bean-name>DocumentControl</managed-bean-name>
<managed-bean-class>xpage.bean.DocumentControl</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
然后新建一个类:
package xpage.bean; import java.lang.reflect.Field; import java.lang.reflect.Method; import lotus.domino.*; import com.ibm.domino.xsp.module.nsf.NotesContext; public class DocumentControl { Session session = null; Database db = null; public DocumentControl(){ } public boolean save(DocumentInterface docbean){ try{ session = NotesContext.getCurrent().getCurrentSession(); db = session.getCurrentDatabase(); if (docbean.getForm().equals(\"DocBean\")){ saveDocument((DocumentBean)docbean); } return true; }catch(Exception e){ e.printStackTrace(); return false; } } private boolean saveDocument(DocumentBean docbean){ Document doc = null; try{ doc = db.createDocument(); Class docclass = docbean.getClass(); Field[] aryfield = docclass.getDeclaredFields(); Object val = null; Field field = null; for (int i =0; i < aryfield.length; i++){ try{ field = aryfield[i]; field.setAccessible(true); val = field.get(docbean); doc.replaceItemValue(field.getName(), val).recycle(); }catch(Exception e){ continue; } } doc.save(true,true); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if (doc != null){ doc.recycle(); } }catch(Exception e){ } } return true; } }在页面上增加一个保存按钮,在它的事件中输入下面的代码:
try{
DocumentBean.fullname = session.getEffectiveUserName();
DocumentBean.subject = getComponent(\"subject\").getValue();
DocumentBean.title = getComponent(\"title\").getValue();
DocumentControl.save(DocumentBean);
}catch(e){
_dump(e)
}finally{
}
相关文章推荐
- java 反射机制的研究与应用
- Java中反射机制的应用
- Java 反射机制 及 应用场景
- JAVA中反射机制的应用
- Java学习之反射机制及应用场景介绍
- java的反射机制及应用
- Java:描述反射机制的作用?举几个反射的应用?
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java:描述反射机制的作用?举几个反射的应用?
- java 反射机制及其应用
- java温故笔记(三)java的反射机制和场景应用
- [零基础学JAVA]Java SE应用部分-36.反射机制与工厂设计模式 推荐
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java的反射机制及应用实例
- Java学习之反射机制及应用场景
- Java 反射机制应用实践
- Java 反射机制应用实践
- java 反射机制的应用
- JAVA 应用 III - 反射机制
- java中的反射机制在android中的应用