读书人

Struts2 Ajax 运用(不再书写type=quot;js

发布时间: 2012-09-10 11:02:33 作者: rapoo

Struts2 Ajax 应用(不再书写type="json")

最近看了一些帖子,发现一些朋友在使用Ajax和Struts2的结合的时候遇到了困惑和问题。特此,我将自己在实际应用中的解决方案拿出来和大家共享。希望可以给那些还没有找到更合适的Ajax方法的朋友提供一些启发。

问题:

struts2 的书籍以及文章中,多数在Ajax应用的时候,要求在struts.xml文件中需要对ajax的返回类型进行配置。如:

type="json"。使用这个配置的时候,必须使用struts2的json插件的jar包。

解决方案:

我给出的方案是:

???? 不使用struts2的json插件的jar包,不需要配置struts.xml中的type="json"

具体实现如下:

???? 使用json-lib.jar(下载地址:http://sourceforge.net/projects/json-lib/files/),需要的环境和jar包:

Json-lib requires (at least) the following dependencies in your classpath:

jakarta commons-lang 2.4 jakarta commons-beanutils 1.7.0 jakarta commons-collections 3.2 jakarta commons-logging 1.1.1 ezmorph 1.0.6

web页面,js里面,我书写的代码(jQuery):

?

var options = {    url: 'test/jsonTest.do',    type:'POST',    dataType:'json',//指定返回数据的解析类型,也可以是 xml    data:{     name:'lilei',     sex:'1'    },    success:function(rs){     if(rs.person){      alert(rs.name + '\t' + rs.sex);    }    },    error: function(rs){},    timeout:3000};$.ajax(options);

?struts.xml 配置文件:

<package name="test" namespace="/test" extends="struts-default"><action name="jsonTest" method="jsonTest"><!-- 注意,这里我什么都没有写,是空的 因为JsonTestAction里面的jsonTest的返回类型为 void --></action></package>

?Action? JsonTestAction的代码:

public class JsonTestAction extends ActionSupport implementsServletResponseAware {private HttpServletResponse response;// -------------- tool methods/** * 注意:因为struts2.xml 里面没有写 <result></result> 这个项,所有这里的类型是 void,而不是 String *  * * */public void jsonTest(){String name = ServletActionContext.getRequest().getParameter("name");Integer sex = Integer.valueOf(ServletActionContext.getRequest().getParameter("sex"));JSONObject json = new JSONObject();json.put("name",name);if(sex.initValue == 1){json.put("sex","男"):}else{json.put("sex","女"):}printToJson(json.toString());}/** * 这里我指定了放回的类型 "text/json" 也可以是xml等其他类型 * 用response直接将数据打回到页面的 ajax 的请求里面去 * */private void printToJson(String jsonStr) {try {response.setCharacterEncoding("UTF-8");response.setContentType("text/json");response.setDateHeader("Expires", 0);PrintWriter out = response.getWriter();out.println(jsonStr);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}//实现 ServletResponseAware 接口,必须实现的方法public void setServletResponse(HttpServletResponse response) {this.response = response;}} 

?

?

这样,就可以通过上面的Action类,将所要的数据,通过response直接到回到ajax的请求里面去。

问题解决。

?

如果朋友们有更好的方法,请在这里留言。谢谢

我们是一样的,应该是最简单的。 其实配置个type=json就很简单吧。何必写这么多的代码。导入struts-json-plugin的类库包 不是更简单吗? 3 楼 huanghao8388 2012-02-19 楼主思路不错,解决了我问题,谢谢!
我的项目Action配了type=json就报错,不配这个参数就正常, 你这个方法解决了我的问题

读书人网 >JavaScript

热点推荐