では次にActionクラスを見てみましょう。Actionクラスのコードは変わりませんが、JSONプラグインの設定であるアノテーションの部分に1つパラメータを追加します。
@Namespace("/json") // パッケージ継承はjson-default @ParentPackage("json-default") // Actionクラスの結果。callbackParameterを指定するだけでJSONP形式になる。 @Results({ @Result(name="success" , type="json" , params={"root","resultList" , "ignoreHierarchy","true", "callbackParameter","callback"}), }) public class JSONPCallBackAction extends ActionSupport { @Action(value="jsnoplist") public String execute() throws Exception { resultList = new ArrayList<String>(); resultList.add("群馬"); …(中略)… resultList.add("長野"); return "success"; } …(中略)… }
追加する点は1か所、@Resultのparams内にて指定している"callbackParameter"、"callback"のみです。先ほどのJSPの例にて特に指定はしていませんが、JSONPの結果を受け取った後に動くJavaScriptの関数名としてcallbackが指定されることで自動的に実行されます。HTMLやJSPなどの画面側で関数名を指定していない場合は、callbackParameterにcallbackを指定するだけです。このように、Actionクラス側で大きな変更をすることなく、JSONPも扱うことができます。
まとめ
今回は簡単な入力画面を通して、JSONプラグインの機能を紹介しました。次回は今まで紹介したプラグイン以外のもので利用価値が高いと思われるものをまとめて紹介します。