struts 2はどのようにjsonを返してjsonを処理します

7094 ワード

以下は弟の少しの研究成果で、みんなと分かち合って、私は3から4の中でstruts 2操作jsonを使って1种の私の认识が最も合理的で最も简単なことを探して、最も下にネット上の资料を引用して、すべて同じように赘述する必要がないため、上はすべて私の実例で、もし间违いがあればみんなに指摘してもらって、もし疑问があれば私のQQ 376434729に连络してください.
必要なjarパッケージはstruts 2です.1.8、jsonプラグインは2.1.8のstruts 2-json-plugin-2.18.1であり、jsonのサードパーティプラグインが多いため、例えばjson-lib-2.4-jdk 15とjsonはjsonの処理を実現できると言っているが、相対的に面倒かもしれないが、S 2が持参したプラグインは簡単である.
例:(ページングクエリーと追加)
エンティティクラス(domain)

public classFieldmanage implements java.io.Serializable {
 
    // Fields
 
    private Integer fieldManageId;
    private String fieldManageName;
    private String fieldManageDesc;
    private String 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;
    }

ビジネスロジック層サービス

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フォーマットに変換する必要はありません.strut 2のプラグインは識別して自動的に変換することができるので、得られたデータsetを入れる必要があります.
Struts.xml


       
            totalCount,data.*
       

       
            success
       

       


extends="json-default"jsonを処理するには、このように設定する必要があります.
1. 
 
 

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変換は必要ありません.resultでは異なり、フロントでeval変換が必要です.
たとえば、dataオブジェクトの下にあるすべてのプロパティと合計バー数を出力します.

    totalCount,data.*

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の先頭の方法があります.