假设代理的名称为xmlJava,用ajax方式传入若干参数,调用该代理,url形如:/xxx.nsf/xmlJava?openagent¶m1=aaa¶m2=bbb¶m3=ccc,最后用PrintWriter返回xml形式的数据给浏览器解析。
JavaAgent.java如下:
import java.io.PrintWriter;
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Document;
import lotus.domino.Session;
/**
* @author Kenny
* Nov 6, 2009
*/
public class JavaAgent extends AgentBase {
public void NotesMain() {
Session session = null;
AgentContext agentContext = null;
Document context = null;
PrintWriter pw = null;
try {
session = getSession();
agentContext = session.getAgentContext();
context = agentContext.getDocumentContext();
String param = context.getItemValueString("Query_String_Decoded");
//得到浏览器的参数,就是url的?后面的部分,
//如openagent¶m1=aaa¶m2=bbb¶m3=ccc
String[] ps = param.split("\\&|\\=");
//用特定的字符拆分,这里用&和=来拆分,得到参数的数组,这里ps[2]=aaa,ps[4]=bbb,ps[6]=ccc
pw = getAgentOutput();
Xml xml = new Xml();
//生成xml的方法,注意一定要另写一个类来实现,否则jdom与Domino的Document对象会有冲突!!!
xml.createXML(pw,ps);
pw.close();
} catch(Exception e) {
System.out.println("JavaAgent method NotesMain() run error: " + e.toString());
} finally {
try {
if(pw != null) pw.close();
if(context != null) context.recycle();
if(agentContext != null) agentContext.recycle();
if(session != null) session.recycle();
} catch(Exception e) {
System.out.println("NotesMain() recycle objects error: " + e.toString());
}
}
}
}
生成XML的实现类Xml.java如下:
import java.io.PrintWriter;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
/**
* @author Kenny
* Nov 6, 2009
*/
public class Xml {
public void createXML(PrintWriter pw,String[] params){
Element root = null;
Document doc = null;
try{
root = new Element("list");//创建根节点
doc = new Document(root);//创建XML对象
/*
* 这里可以放上与关系数据库交互得到的数据,此处略去
*/
for(int i = 0;i<params.length;i++){
//添加节点,此处仅作示例,具体jdom生成xml方法参考Google
root.addContent(new Element("value").setText(params[i]));
}
//下面这句很重要,一定要,否则返回的是普通的字符串,在客户端将无法解析成XML对象
pw.println("Content-type:text/xml");
XMLOutputter XMLOut = new XMLOutputter();
XMLOut.output(doc, pw);
pw.close();
}catch(Exception e){
System.out.println("Xml.java method createXML() run error: " + e.toString());
}finally{
try{
if(pw != null) pw.close();
}catch(Exception e){
System.out.println("createXML() recycle objects error: " + e.toString());
}
}
}
}
最后,在浏览器端,用JavaScript对得到的responseXML对象进行解析(具体方法参考Google),就可以得到相应的数据了。以上代码在Domino R8.5下测试通过。