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)
データアクセスDao
ビジネスロジック層サービス
Struts制御層
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の先頭の方法があります.
必要な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の先頭の方法があります.