特别推荐:作者的Json-rpc-for-java已经开源

特别推荐:作者的Json-rpc-for-java已经开源
详细信息请见:
http://code.google.com/p/json-rpc-for-java/

继《JavaScript高级应用与实践》之后推出的开源代码:
http://blog.csdn.net/jxpath
http://blog.sina.com.cn/jcore
http://m9m.3322.org

工程svn下载地址:
http://json-rpc-for-java.googlecode.com/svn/trunk/

json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过
javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外
的JavaScript编程,就可以通过javascript调用被注册的java对象并返回java对象,如果被返回的对象
还有方法,这个在javascript中返回的java对象的变量,你还可以继续调用它的方法.....这就是这个轻
量级json-rpc-for-java的神奇之处。
当返回的是java对象List的时候,在javascript中体现为ArrayList,如果是Map,着体现为js中的
Object,其他的和java中的调用基本相同。
特殊的地方是,通过JS调用java对象方法的时候只能传入简单类型的参数,比
如:String,int,float,long等。

json rpc for java的使用
0、项目中web.xml需要加入:
<servlet>
<servlet-name>JSONRPCServlet</servlet-name>
<servlet-class>
jcore.jsonrpc.servlet.JSONRPCServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSONRPCServlet</servlet-name>
<url-pattern>/JRPC</url-pattern>
</servlet-mapping>

1、需要在工程中引入JSON-RPC.jar:
并在需要使用json-rpc功能的jsp中引入JsonRpcClient.js

2、用于json-rpc-for-java异步的对象类必须继承于extends JsonRpcObject,例如:
package com.jcore.web.common;
import jcore.jsonrpc.common.JsonRpcObject;

public abstract class JsonRpcObj extends JsonRpcObject {

public JsonRpcObj() {
super();
}

private String errMsg = "";

/***
* 获取异常、错误消息使用
* @return
*/
public String getErrMsg()
{
String s = errMsg;
errMsg = "";
return s;
}
public JsonRpcObj setErrMsg(String s)
{
errMsg = s;
return this;
}

}

3、如何在Action中注册用于异步的类对象:
JsonRpcRegister.registerObject(us, "ac01", JsonRpcObj .class);
// 其中ac01是我们注册到内存的名字,不能同名,注册的一个对象可以有N个方法,可以用作不同用途
的异步处理
// 每个对象只需要注册一次

4、注意点:用于异步的类的方法可以返回任意类型的对象,但是入口参数只能是String、int、Integer

5、jsp中如何使用
<script charset="UTF-8" type="text/JavaScript" src="JsonRpcClient.js"></script>
<script charset="UTF-8" type="text/JavaScript"><!--//--><![CDATA[//><!--

// ac01就是通过JsonRpcRegister.registerObject注册的名字
// 这时候这里的rpc就拥有了通过JsonRpcRegister.registerObject注册的异步对象的相应方法了
var rpc = JsonRpcClient().ac01;
// 传入个人编号获取人的基本信息并填充到界面上
if("dto(aac001)" === o.name && 0 === "aab001".getValue().length)
{
if(0 < o.value.length)
{
// 获取到的ac01同样有aac001,aab001等等属性,你可以直接使用,同样有getAac001()等方法,可以直接使用,而不需要额外的编码
var ac01 = rpc.getEmployeeBaseInfo(o.value), errMsg = rpc.getErrMsg();
if(0 < errMsg.length)
return o.focus(), alert(errMsg), false;
for(var k in ac01)
if(6 === k.length && ac01[k])
k.getObj() && k.setValue(ac01[k]);
fnSetAtbt("dto(aac001)".getObj(),1),
fnSetAtbt("dto(aab001)".getObj(),4),
"aab001".focus();
// 关闭错误消息提示
;
}
}
//--><!]]></script>

你可能感兴趣的:(JavaScript,java,json,servlet,SVN)