JSON-RPCでAjax - 足し算
■add.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add</title> <link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css" /> <script type="text/javascript" src="../ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-all.js"></script> <script type="text/javascript"> <!-- //<![CDATA[ Ext.onReady(function(){ Ext.get('calc').on('click', function(){ var arg1 = Ext.get('arg1').getValue(); var arg2 = Ext.get('arg2').getValue(); Ext.Ajax.request({ url : 'rpc.json' , method: 'POST' , params : Ext.util.JSON.encode( { method: 'calc.plus', params: [arg1,arg2], id: 1 } ) , success: function ( result, request ) { Ext.getDom('result').firstChild.data = Ext.util.JSON.decode(result.responseText)['result']; } , failure: function ( result, request ) { Ext.MessageBox.alert('Failed', result.responseText); } }) }) }) //]]> //--> </script> </head> <body> <form> <input type="text" id="arg1"/>+<input type="text" id="arg2"/>=<span id="result"> </span><br/> <input type="button" id="calc" value="calc"/> </form> </bodY> </html>
■CalcService.java
package sample.web.add; public class CalcService { public int plus(int a, int b) { return a + b; } }
今回のポイントはメソッドの引数とそれに対応するパラメーター。 POJO のメソッド plus(int a, int b) は引数を持っており html から値を渡す必要がある。値の渡し方は
params : Ext.util.JSON.encode( { method: 'calc.plus', params: [arg1,arg2], id: 1 } ) ,
の params: [arg1,arg2] で id が "arg1" 、 "arg2" のエレメントの value を配列にして渡す。これだけ。
先の最初の一歩編と足し算編が基礎になり、後は ExtJS のグリッドやダイナミックフォームが使えるようになれば Flex にも負けない立派な Web アプリケーションの出来上がり。
FireFox3 や Safari なんかのモダンブラウザだと JavaScript エンジンが優秀で実行もなかなか早い。これで HTML 5 が本格的になってきたら笑いがとまりませんなー。わっはっはっは。