struts 2のjson-defaultとstruts-defaultの違い

3769 ワード

struts 2のjson pluginはstruts 2とjsonの完璧な結合を実現することができ、本編では主に統合過程で出会った問題を紹介するため、プログラミングの実現方法はここでは繰り返しません.具体的にはstruts 2の公式ドキュメント:http://struts.apache.org/2.2.1.1/docs/json-plugin.htmlを参照してください.
私はstrutsにいます.xmlには次のaction定義があります.
<action name="product_group" class="customers.products" method="getGroups">
<result type="json">
<param name="root">groupList</param>
</result>
</action>

上記の定義では、actionのresultのtypeがjsonであり、json pluginはactionでgroupListと定義されたfieldを自動的にjson形式のデータに変換し、フロントエンドUIに返すことができる.
しかしdeploy後tomcatを起動するとThere is no result type defined for type'json'mapped with name'success'と報告された.Did you mean 'json'?struts 2ではjsonというresult typeの定義が見つからないため、エラーが発生しました.解決策は次の2つです.
 
1.現在のpackageのextends属性を「json-default」に変更します.すなわち、struts-defaultではなくjosn-defaultから現在のpackageを継承します.
 
2.ただし、現在のpackageが「json-default」を継承できない場合は、result-typeを現在のpackageで定義し、jsonを次のように追加することもできます.
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>

 
2つの方法の原理:
jsonというresult typeは、json-default(struts 2-json-plugin-2.18.1.jarstruts-plugin.xml)で定義されています.内容は以下の通りです(xmlとdoctypeラベルは省略).
<struts>
<package name="json-default" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
</package>
</struts>


名前が「json」のresult typeはjson-defaultで定義されているため、json-default継承からjsonというresultを使用することができます.さらにjson-defaultは、「json」という名前のinterceptorを定義します.
また,json−defaultの定義から見ると,方法2ではjsonのinterceptor定義をもう1つ追加するのが適切である.