読者です 読者をやめる 読者になる 読者になる

[Java]Stripes Frameworkどうよ。 その4 〜JSONレスポンスあるよ。

引き続きStripesです。
JSONのレスポンスを返す機能が標準でありました。

まずは、ActionBean

package action;

import java.util.HashMap;
import java.util.Map;

import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.ajax.JavaScriptResolution;
import selva2.Action;

public class AjaxAction extends Action {

    @DefaultHandler
    public Resolution defaultHandler() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("id", "1");
        map.put("name", "KING");
        return new JavaScriptResolution(map);
    }
}

JavaScriptResolutionクラスが、JSONを返すResolutionです。引数にBeanやMapを渡せばJSONに展開してくれます。
なんで、JsonResolutionクラスじゃないんだ?と思ったら、実際に返しているのは、JavaScriptのコードでした。

次、html。jquery使います。

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
function ajaxAction() {
  $.ajax({
    type: "POST",
    url: "/webapp2/Ajax.action",
    dataType: "script",
    success: function(res){
      var obj = eval(res);
      $('#id').html(obj.id);
      $('#name').html(obj.name);
    }
   });
}
</script>
</head>
<body>
<input type="button" onclick="ajaxAction()" value="ajax" />
<ul>
<li>id: <span id="id"></span></li>
<li>name: <span id="name"></span></li>
</ul>
</body>
</html>

はい。Jacksonのjar入れて、JsonResolutionとか独自で作った方が良いやも。

以上