如下是小弟的一點研究成果,拿來和你們分享,我用了3到4中struts2操做json找了一種我認識最合理和最簡單的,最下面有引用網上的資料,由於都同樣就沒有必要贅述了,上面都是我本身的實例,若有錯誤請你們指正。java
須要的jar包是struts2.1.8,json插件就是2.1.8的struts2-json-plugin-2.1.8.1,由於json的第三方插件有不少,例如json-lib-2.4-jdk15和json雖說能夠實現json的處理,可是相對來講多是有點麻煩,而S2自帶的插件爲簡單一點。web
實例:(分頁查詢和添加)正則表達式
實體類(domain)spring
public classFieldmanage implements java.io.Serializable {json
// Fields瀏覽器
privateInteger fieldManageId;dom
privateString fieldManageName;this
privateString fieldManageDesc;spa
privateString isuse;插件
getter&&setter省略。
}
數據訪問Dao
public classFieldManageDao extendsHibernateEntityDao<Fieldmanage> {
public booleanoperaFieldmanage(Fieldmanage fieldmanage){
try {
this.saveOrUpdate(fieldmanage);
return true;
} catch(Exception e) {
e.printStackTrace();
}
return false;
}
publicList<Fieldmanage> getFieldmanageList(String name,intstart,int end){
String hql="from Fieldmanage where fieldManageName like '%"+name+"%'";
List<Fieldmanage> list=null;
try {
Query q = this.getSession().createQuery(hql);
q.setFirstResult(start);
q.setMaxResults(end);
list = q.list();
} catch(Exception e) {
e.printStackTrace();
}
return list;
}
public intgetFieldmanageCount(String name){
String hql="select count(*) from Fieldmanage where fieldManageName like '%"+name+"%'";
intcount=0;
try {
Query q =this.getSession().createQuery(hql);
count = Integer.parseInt(q.uniqueResult().toString());
} catch(Exception e) {
e.printStackTrace();
}
returncount;
}
業務邏輯層Service
public classFieldManageService {
//spring注入
privateFieldManageDao fieldManageDao;
public voidsetFieldManageDao(FieldManageDao fieldManageDao) {
this.fieldManageDao = fieldManageDao;
}
public booleanoperaFieldmanage(Fieldmanage fieldmanage){
return fieldManageDao. operaFieldmanage (fieldmanage);
}
publicList<Fieldmanage> getFieldmanageList (String name,intstart,int end){
List<Fieldmanage> list=null;
try {
list = fieldManageDao.getFieldmanageList(name, start, end);
} catch(Exception e) {
e.printStackTrace();
}
return list;
}
public intgetFieldmanageCount(String name){
return fieldManageDao.getFieldmanageCount(name);
}
}
Struts控制層
public classFieldManageAction extends ActionSupport {
privateFieldManageService fieldManageService;
privateFieldmanage fieldmanage;
privateList<Fieldmanage> data;
private int totalCount;
privateString success;
//分頁
private int start;
private int limit;
均有getter和setter方法,可是service注入進來的方法最好沒有get
publicString operaFieldmanage(){
try {
boolean sign = fieldManageService.operaFieldmanage(fieldmanage);
if(sign){
this.setSuccess("true");
}else{
this.setSuccess("false");
}
} catch(Exception e) {
this.setSuccess("false");
e.printStackTrace();
}
return "operaFieldmanage";
}
publicString fieldManageList(){
String name="";
try {
if(fieldmanage對象和名稱是否爲null){
name=fieldmanage.getFieldManageName();
}
intlimitNo=15;
if(limit!=0){
limitNo=limit;
}
int count = fieldManageService.getFieldmanageCount(name);
List<Fieldmanage> list = fieldManageService.getFieldmanageList(name, start, limitNo);
this.setData(list);
this.setTotalCount(count);
} catch(Exception e) {
e.printStackTrace();
}
return this.SUCCESS;
}
}
Action裏面提供get方法就好了,沒必要用其餘的json插件將list等轉化爲json格式,由於strut2的插件能夠幫你識別並自動轉換,你須要作的就是將你獲得的數據set進去。
Struts.xml
<package name="default" extends ="json-default" >
<action name="fieldManage_*" method="{1}" lass="fieldManageAction">
<result type="json">
<param name="includeProperties">totalCount,data.*</param>
</result>
<result name="operaFieldmanage" type="json">
<param name="includeProperties">success</param>
</result>
</action>
</package>
extends=」json-default」這邊必須這樣設置才能處理json。
1.<action name="test" class="com.TestAction" method="test">
<result type="json" /><!--將action的bean屬性以json字符串返回瀏覽器-->
</action>
2.只要繼承extends="json-default",json攔截器是默認配置上的,能夠不配。result設置成json以後,容器會把action的屬性自動封裝到一個json對象中(json攔截器來作),而後調用js的callback方法. 返回json數據
3.若是按照1中的配置。你會發現前臺返回的json字符串,是把action中的全部屬性所有轉化爲json字符串返回給瀏覽器了(甚至有時候返回不告終果,也不報錯,後臺執行了,但前臺執行不到callback function),可是咱們有時候須要根據實際狀況返回部分結果,如何對json的結果進行定製輸出呢?result提供了一些參數替你解決這個問題,通常狀況下用的最多的就是includeProperties 參數和excludeNullProperties參數。固然還有其餘的方法,如給pojo的屬性加json註解。
4.includeProperties 參數:輸出結果中須要包含的屬性值,這裏正則表達式和屬性名匹配,能夠用「,」分割填充多個正則表達式。這個參數直接返回對象的json數據,前臺不須要eval轉換,<param name="root">result</param>則不一樣,須要前臺進行eval轉換
如:輸出data對象下面的全部屬性 和 總條數。
<result type="json">
<param name="includeProperties">totalCount,data.*</param>
</result>
5.excludeProperties 參數:輸出結果須要剔除的屬性值,也支持正則表達式匹配屬性名,能夠用「,」分割填充多個正則表達式,類同includeProperties
6.對一些屬性的特殊處理可在action代碼中去特殊的序列化,如:
[6.1]默認狀況下以get方法開頭的都會序列化,若是不想序列化,在action中的方法要打上註解
@JSON(serialize=false)
[6.2]若是在屬性get方法上面加@JSON(name="newName"),則返回的json數據中名稱是指定的新名稱
[6.3]@JSON(format ="yyyy-MM-dd'T'HH:mm:ss")設置用於格式化輸出、解析日期表單域的格式。
[6.4]@JSON(deserialize=true)設置是否反序列化該屬性
注意:爲了不沒必要要的麻煩,action裏面要有有get開頭的方法。