今天来说说如何用Jquery实现Struts 2中的Ajax。
2、struts.xml添加专为ajax使用的package
class="org.david.struts2.HelloWorld">
3、helloworld.jsp
{
var url='ajaxRequest.action';
varparams={
name:$('#name').attr('value')
};
$.post(url,params, callbackFun,'json');
}
function callbackFun(data)
{
alert(data.result);//对应HelloWorld类的message属性//获取数据后渲染页面}
4、HelloWorld.java
package org.david.struts2;publicclassHelloWorld {privateString name;privateString result;//ajax请求参数赋值publicvoidsetName(String name) {this.name=name;
}//ajax返回结果publicString getResult() {returnresult;
}publicString execute() {this.result="Hello!"+this.name+".";return"success";
}
}
顺便说一下这个HelloWorld的代码,如果需要在类里用到一个辅助类,如操作JDBC的数据库访问类,修改如下
package org.david.struts2;
public class HelloWorld {
private String name;
private String result;
private DBOperator dbOperator;
@JSON(serialize=false)
priavate DBOperator getDbOperator()
{
return this.dbOperator;
}
private void setDbOperator(DBOperator dbOperator)
{
this.dbOperator=dbOperator;
}
// ajax请求参数赋值
public void setName(String name) {
this.name = name;
}
// ajax返回结果
public String getResult() {
return result;
}
public String execute() {
this.result ="Hello! " +this.name +".";
return "success";
}
}
其实这样写主要是我做项目的时候要用到Spring的注入,必须这样做。好了,说正文。这个时候在getter 访问器上一定要加上@JSON(serialisze=false),这样才能够正常请问这个result的值。如果不这样做的话,在前台页面是无法得到JSON值的。
顺便来说说jquery里的参数传递。
varparams={name:$('#name').attr('value')};
这只是一个值,如果是多个值,中间用“,”隔开(英文的逗号), 如
var pageNumber=10;
var params={name:$("#name").val(),id:10,pageNumber:pageNumber};
格式大概就是{参数名:值,参数名:值} 这个可以去查一下,基本就是这样子写,里面可以是多个键值对,如果不指定参数的话 直接两个花括号括起来就可以了。如:
var params={};
jquery提供的ajax函数还有好几个, 如$.post(url,[data],[callbackFun],[type]), $.get(url, [data], [callback], [type])
$.getJSON(url, [data], [callback])等
这个大家可以去查一下文档,我这说的三个函数都是$.ajax()方法的另外一种版本而已。