直接把QQ日志搬进来,偷下懒 嘿嘿。
一、准备
1、S2SH整合相关问题这里不做过多介绍;
2.、引入实现Ajax相关的jar包:测试项目中所采用的Struts版本为struts2.1.8,该版本jar包中包含所需插件(json-lib-2.1.jar,struts2-json-plugin-2.1.8.1.jar),之前版本可能需要下载JSON插件;
3、引入jquery相关JS文件;
二 、工程中实现Ajax
这里以实现二级联动下拉菜单为例。
1、在JSP页面中编写前端javascript:项目中使用了jquery的$.getJSON(url,params,function callback(data))函数提交ajax请求到指定url,各个参数的含义为:
url:处理请求的地址,本工程中对应Action中的一个方法;
params:请求参数;
callback(data):回调函数,即接收到服务器处理结果后前端页面执行的方法,data为服务器返回的结果;
2、Ajax请求的配置:Ajax请求类型有别于一般struts2请求,继承自json-default,返回结果类型为json,json-default和“json”的结果类型都在struts2-json-plugin-2.1.8.1.jar的struts-plugin.xml中定义;
struts.xml中action的配置如下:
<package name="ajax" namespace="/ajax" extends="json-default">
<action name="getsub" class="transBfAction" method="getSubAccList">
<result type="json">
<param name="excludeProperties">.*hibernateLazyInitializer</param>
<param name="root">result</param>
</result>
</action>
</package>
其中,与一般action配置不同的是package 中的 extends的设置,aciton返回结果result的返回类型;result中的第一个参数是解决hibernate反射关闭的也就是实体中的属性是另外的实体的问题,有待进一步考察;第二个参数表示返回结果,其值和Action中名称须保持一致,本项目中在Action类中定义了一个名称为result的属性,在对应方法中将返回值赋值给了result;
3、前台JSP接收请求返回结果:本工程使用了JS的eval方法将返回结果data转换成JSON对象,之后进行处理。
下面附上JS代码和相关Action中的代码:
JS:$(function(){
$("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})
$(function(){
$("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})
JS中注意params的写法, params = {'index':$(this).val()};index将''号;
Action对应方法代码:
public String getSubAccList() {
String JSON_text = "";
//获取请求参数
String acctid = this.request.getParameter("index");
//中间具体数据处理代码略
......
//将返回结果赋值给result,与struts.xml中一致
this.result = JSON_text;
return SUCCESS;
}
一、准备
1、S2SH整合相关问题这里不做过多介绍;
2.、引入实现Ajax相关的jar包:测试项目中所采用的Struts版本为struts2.1.8,该版本jar包中包含所需插件(json-lib-2.1.jar,struts2-json-plugin-2.1.8.1.jar),之前版本可能需要下载JSON插件;
3、引入jquery相关JS文件;
二 、工程中实现Ajax
这里以实现二级联动下拉菜单为例。
1、在JSP页面中编写前端javascript:项目中使用了jquery的$.getJSON(url,params,function callback(data))函数提交ajax请求到指定url,各个参数的含义为:
url:处理请求的地址,本工程中对应Action中的一个方法;
params:请求参数;
callback(data):回调函数,即接收到服务器处理结果后前端页面执行的方法,data为服务器返回的结果;
2、Ajax请求的配置:Ajax请求类型有别于一般struts2请求,继承自json-default,返回结果类型为json,json-default和“json”的结果类型都在struts2-json-plugin-2.1.8.1.jar的struts-plugin.xml中定义;
struts.xml中action的配置如下:
<package name="ajax" namespace="/ajax" extends="json-default">
<action name="getsub" class="transBfAction" method="getSubAccList">
<result type="json">
<param name="excludeProperties">.*hibernateLazyInitializer</param>
<param name="root">result</param>
</result>
</action>
</package>
其中,与一般action配置不同的是package 中的 extends的设置,aciton返回结果result的返回类型;result中的第一个参数是解决hibernate反射关闭的也就是实体中的属性是另外的实体的问题,有待进一步考察;第二个参数表示返回结果,其值和Action中名称须保持一致,本项目中在Action类中定义了一个名称为result的属性,在对应方法中将返回值赋值给了result;
3、前台JSP接收请求返回结果:本工程使用了JS的eval方法将返回结果data转换成JSON对象,之后进行处理。
下面附上JS代码和相关Action中的代码:
JS:$(function(){
$("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})
$(function(){
$("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})
JS中注意params的写法, params = {'index':$(this).val()};index将''号;
Action对应方法代码:
public String getSubAccList() {
String JSON_text = "";
//获取请求参数
String acctid = this.request.getParameter("index");
//中间具体数据处理代码略
......
//将返回结果赋值给result,与struts.xml中一致
this.result = JSON_text;
return SUCCESS;
}