org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:172)
struts 2有一个处理json请求的插件:
处理流程:
原图地址:
http://cqjava.iteye.com/upload/picture/pic/48651/47962312-47c6-3a67-a7f6-795e666ba572.gif
struts.xml中的配置:
- <package name="default" extends="json-default">
.*
true
text/html
.*
true
text/html
.*
true
text/html
默认返回json的数据的时候会调用Action中的所有getXXX()方法(
推荐:Action中除属性的get方法外,不要使用getXXX方法充当Action执行的方法。)。
.* //输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式
过滤所有属性 之所有这么写:是因为自定义了个struts2的拦截器extends StaticParametersInterceptor 这个里面通过捕获异常进行如下处理
String msg = "{errorMsg:'" + e.getMessage() + "'}";
response.setContentType("text/xml; charset=UTF-8");
response.setCharacterEncoding("UTF-8"); response.setContentLength(msg.getBytes("UTF-8").length);
PrintWriter out = response.getWriter();
out.print(msg);
因此在客户端js中可以通过判断返回data的errorMsg是否存在来判断是否执行Success
success:function(data){
var dt = eval('('+ data +')');
if(dt.errorMsg)
alert(dt.errorMsg);
else{
alert('业务操作成功!');
}
true
text/html 当返回成功时定义返回类型。否则有可能当成下载方法处理
listEutDto 返回指定的属性 还可以细化到属性对象下的属性
- <param name="excludeNullProperties">trueparam>
去除为null的属性。
-
<param name="ignoreHierarchy">falseparam> 是否忽略父类中的属性
-
<param name="includeProperties">person.*, person.nameparam>
请求的URL为:/NewsAjax!****NewsAjax.action?******; 前面为Action名字,后面为方法名字。 方法的名字不需要在struts.xml中进行配置。