###前提・実現したいこと
struts-config.xmlでactionメソッドごとにresultでtype="json"を指定すると実現できるが、
convention-pluginを利用しているので同様なことをアノテーションで実現したいがうまく動作しない。
convention-plugin、json-pluginだけの、ZeroConfigurationで実現したい。
※他のアクションは全てアノテーションを使っているのでjsonデータのpostの部分だけ、
struts-config.xmlでの設定を併用はしたくなく、仕方がないので今は、postデータをjson形式ではなく
シリアライズした文字列としてサーバに渡し、json-pluginを使わずアクションメソッド内でjacksonで
自力でデシリアライズするようにしています。
###発生している問題・エラーメッセージ
struts-config.xmlで指定した場合は、メソッドが呼ばれたときに、actionクラスで定義している
オブジェクトに自動でjsonデータが格納されている(List<POJOクラス>型のオブジェクト)
アノテーションの設定だけでやろうとしても上記のオブジェクトは、どうしてもnullになる。
※アノテーションでの同様の設定の仕方がわからない。
###該当のソースコード
(java) @ParentPackage("json-default") @Results({ @Result(name="json", type="json", params={"root","data", "noCache","true"}), @Result(name="exception", location="/exception.jsp") }) public class SampleAction extends Action { private List<POJO> data; //with setter,getter @Action("set-data") //@Actioにresults={@Result(type="json",params={"enableSMD","true"})}を指定してもダメ public String setData() { System.out.println(data); //data=null(デシリアライズされない) return successValue; } } (jsp) $("#button").click(function(e) { $.ajax({ url: 'set-data.action', type: 'post', data: '{"data":' + JSON.stringify(arrayData) + '}', dataType: 'json', contentType:"application/json;charset=utf-8", success: function (res) { console.debug(res); } }); });
###試したこと
struts-config.xmlで指定するとちゃんとオブジェクトにデシリアライズされる
(参考)http://stackoverflow.com/questions/19566700/how-to-use-jquery-to-post-json-data-to-a-struts2-action-class
(struts-config.xml) <package name="sample.action" namespace="/" extends="json-default"> <action name="set-data" class="sample.action.SampleAction" method="setData"> <result type="json"> <param name="enableSMD">true</param> </result> </action> </package> ※<param name="enableSMD">true</param>は指定しなくても動作した。
###補足情報(言語/FW/ツール等のバージョンなど)
struts2-2.3.20
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。