缺少jar包 | 錯誤 |
xwork-2.1.2.jar | java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger; |
commons-fileupload-1.2.1.jar | java.lang.NoClassDefFoundError: org/apache/commons/fileupload/RequestContext |
freemarker-2.3.13.jar | Caused by: java.lang.NoClassDefFoundError: freemarker/template/SimpleHash |
ognl-2.6.11.jar | Caused 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] |
版本說明 | 整合必須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.jar | jsonplugin-0.33.jar | 必須要jsonplugin-0.33.jar才行,必須xwork-2.1.2以上 |
struts2-core-2.0.5.jar+xwork-2.0.0.jar | jsonplugin-0.31.jar | 沒有commons-fileupload-1.2.1.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 |
struts.enable.DynamicMethodInvocation = false
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
</action>
<action name="dojson" class="com.action.TestAction" method="jsontest">
<result type="json"/>
</action>
<result type="json" >
</action>
</package>
public class TestAction extends ActionSupport{
private String jsonResult;
public String getJsonResult() {
return jsonResult;
}
this.jsonResult = jsonResult;
}
public String execute(){
System.out.println("doquery########");
return SUCCESS;
//return "success";
}
public String jsontest(){//這裏返回的是list的字符串
Users users = new Users();
users.setUserName("test1");
users.setSex("男人");
userList.add(users);
users = null;
users = new Users();
users.setUserId(2);
users.setUserName("test2");
users.setSex("女人");
userList.add(users);
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);
}
});
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"]);
});
});
return sex;
}
this.sex = sex;
}
return userId;
}
this.userId = userId;
}
return userName;
}
this.userName = userName;
}
private String email;
private String content;
private Map<String,String> addstatus;
private String result;
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("application/json");
addstatus= new HashMap<String, String>();
addstatus.put("email", "[email protected]");
addstatus.put("content", "asd");
setEmail("[email protected]");
setContent("asd");
JSONObject jsonobj =JSONObject.fromObject(addstatus);
return "status";
return email;
}
this.email = email;
}
return content;
}
this.content = content;
}
return result;
}
this.result = result;
}
return addstatus;
}
this.addstatus = addstatus;
}
}
alert(data);
var vv=eval('('+data+')');
alert(vv.content);
var qq=eval('('+vv.result+')');//result是map的字符串
alert(qq.email);
});
----也可以
alert(data);
alert(data.content);
var qq=eval('('+data.result+')');
alert(qq.email);
});
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result> <result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>
<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註解。