struts+jquery+json配置详解

--------------------struts2所需jar包及错误总结-----------------------
红色是struts2必须jar包,黄色是出现警告但不会报错
缺少jar包错误
xwork-2.1.2.jarjava.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger;
commons-fileupload-1.2.1.jarjava.lang.NoClassDefFoundError: org/apache/commons/fileupload/RequestContext
freemarker-2.3.13.jarCaused by: java.lang.NoClassDefFoundError: freemarker/template/SimpleHash
ognl-2.6.11.jarCaused by: java.lang.NoClassDefFoundError: ognl/NullHandler
struts2-core-2.1.6.jar 
log4j-1.2.14.jar
警告: Could not find property [org.apache.catalina.jsp_file]
警告: Could not find property [struts.valueStack]
  
因struts2整合json必须的jar  包及struts2版本出现的问题
版本说明整合必须jar包错误
struts2-core-2.0.5.jar下好好的,换成struts2-core-2.1.6.jar后出现的问题jsonplugin-0.31.jar
Caused by: The package name 'json-default' at location package
Unable to load configuration. - package - jar:file:WEB-INF/lib/jsonplugin-0%5B1%5D.31.jar!/struts-plugin.xml:8:59
struts2-core-2.1.6.jarjsonplugin-0.33.jar必须要jsonplugin-0.33.jar才行,必须xwork-2.1.2以上
struts2-core-2.0.5.jar+xwork-2.0.0.jarjsonplugin-0.31.jar没有commons-fileupload-1.2.1.jar包也可以运行
   
要用json插件jar包必须用以下6个jar包
------------------------------------------------------
json-lib-2.3-jdk15.jar
commons-lang.jar  
commons-logging.jar
ezmorph-1.0.6.jar
commons-collections.jar
commons-beanutils-core-1.7.0.jar
----------------------json错误汇总------------------------
java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException------缺少conmmons-lang.jar
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory-----------------------------缺少commons-loggin.jar
java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher-----------------------------------------------缺少ezmorph.jar/本人用的版本ezmorph-1.0.6.jar
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap----------------缺少commons-collections.jar/本人所用版本commons-collections-3.2.1.jar
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean-----------------------------缺少commons-beantils-core.jar/本人所用版本commons-beantils-core-1.7.0.jar
------------配置-----------------
src目录下struts.properties文件内容
------------begin-----------
struts.devMode = true
struts.enable.DynamicMethodInvocation = false
-------------end---------
src目录下struts.xml内容
---------------------------begin-------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    " http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends=" json-default">
<action name="doquery" class="com.action.TestAction" method="execute">//当一个action里有多个请求时可以用method=""说<result type="json"/>                                                                                     //明调用的方法
</action>
<action name="dojson" class="com.action.TestAction"  method="jsontest">
<result type="json"/>
</action>
<action name="insertstatus" class="com.action.MyAction" >
<result type="json" >
</action>
</package>
</struts>
--------------end-------------
TestAction.java代码
@SuppressWarnings("serial")
public class TestAction extends ActionSupport{
private String jsonResult;
@JSON(name="JSONRESULT")
public String getJsonResult() {
  return jsonResult;
}
public void setJsonResult(String jsonResult) {
  this.jsonResult = jsonResult;
}

public String execute(){
  System.out.println("doquery########");
  return SUCCESS;
  //return "success";
 
}
public String jsontest(){//这里返回的是list的字符串
List<Users> userList = new ArrayList<Users>();
  Users users = new Users();
  users.setUserId(1);
  users.setUserName("test1");
  users.setSex("男人");
  userList.add(users);
  users = null;
  users = new Users();
  users.setUserId(2);
  users.setUserName("test2");
  users.setSex("女人");
  userList.add(users);
  jsonResult =JSONArray.fromObject(userList).toString();
}
}
---页面解析json(list)-------
$. post("dojson.action",{},function(data){
var userList = eval('(' + data + ')');
var user = eval(userList.JSONRESULT);//JSONRESULT和java代码@JSON(name="JSONRESULT")一致,不写就是属性名
  for(var i=0;i<user.length;i++){
  alert(user[i].userName);
  }
  });
也可以---
$. getJSON("dojson.action",{},function(data){
var user=eval(data.JSONRESULT);
//for(var i=0;i<user.length;i++){
//alert(user[i].userName);
//}
$.each(user,function(i,value){
alert(value["userName"]);
});
});
------------
Users.java代码
public class Users {
private Integer userId;
private String userName;
private String sex;
public Users() {
}
public String getSex() {
  return sex;
}
public void setSex(String sex) {
  this.sex = sex;
}
public Integer getUserId() {
  return userId;
}
public void setUserId(Integer userId) {
  this.userId = userId;
}
public String getUserName() {
  return userName;
}
public void setUserName(String userName) {
  this.userName = userName;
}
}
-----------------------MyAction.java代码-----------------------
public class MyAction {
private String email;
private String content;
  private Map<String,String> addstatus;
private String result;
public String execute()throws Exception {
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("application/json");
addstatus= new HashMap<String, String>();
addstatus.put("email", " 1@1.com");
addstatus.put("content", "asd");
setEmail(" 1@1.com");
setContent("asd");
JSONObject jsonobj =JSONObject.fromObject(addstatus);
result=jsonobj.toString();
  return "status";
}
public String getEmail() {
  return email;
}
public void setEmail(String email) {
  this.email = email;
}
public String getContent() {
  return content;
}
public void setContent(String content) {
  this.content = content;
}
public String getResult() {
  return result;
}
public void setResult(String result) {
  this.result = result;
}
public Map<String, String> getAddstatus() {
  return addstatus;
}
public void setAddstatus(Map<String, String> addstatus) {
  this.addstatus = addstatus;
}
}
-------页面解析json(string和map)
$. post("insertstatus.action",function(data){
alert(data);
var vv= eval('('+data+')');
alert(vv.content);
var qq= eval('('+vv.result+')');//result是map的字符串
alert(qq.email);
});
----也可以
$.getJSON("insertstatus.action",function(data){
alert(data);
alert(data.content);
var qq=eval('('+data.result+')');
alert(qq.email);
});
---------struts.xml也可以
输出UserInfo的所有属性及UserInfo的userName属性
<result type="json">
   <param name="includeProperties"> userInfo.*,
   userInfo \. userName </param>
</result> <result type="json">
   <param name="includeProperties"> userInfo.*,
   userInfo \. userName </param>
</result>
---excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
---
输出一个JSON List列表
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
其中userInfosList是action中的一个List类型的属性,
userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性
(list中存储的对象必须有userName属性)。
为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,
pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。
如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,
还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,
如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。
如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,
是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。
有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,
这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 
和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值