一、使用stream类型的Result实现Ajax
具体步骤:
① 定义InputStream类型的成员变量及getter和setter
②具体业务方法中将要发送到客户端的json字符串赋值给成员变量
③编写struts.xml,定义stream生成响应数据类型及输出结果
二、配置Action的result
具体步骤:
①定义package,并继承struts-default
②使用<action>标签定义StreamResultAction类对应的名称和所在位置
③使用stream类型的result结果集
④使用<param>标签指定stream生成响应数据类型及输出结果
三 编写Action类 并继承自ActionSupport类
注:定义的inputStream成员变量要和struts.xml<param>参数一致,并使用ByteArrayInputStream将要发送到客户端的数据赋值给成员变量
四 实现用户名验证
使用jQuery的Ajax方法发送数据到服务器端,获取stream类型的返回数据,并更新页面提示信息,进行拆解数据。需引入jQuery库
<body> <div id="demo"></div> <table> <tr> <td>姓名:<input type="text" name="name" id="name" οnblur="validate();"/></td> </tr> <tr> <td>密码:<input type="password" name="name" id="name"/></td> </tr> <tr> <td><center><input type="button" value="提交"/></center></td> </tr> </table> </body>
实现效果:
使用JSON插件实现JSON类型的Result
具体步骤:
①将struts2-json-plugin-xxx.jar加入到struts2工程下
②在struts.xml中编写<package>标签,并指定该package继承json-default
③在<package>标签下定义具体的<action>标签,将其子标签<result>的type属性指定为“json”
以用户登录为例:当服务器端接收到用户信息后,进行业务判断,然后返回JSON格式的数据
JSON类型的Result的常用参数:
编写Action类重写execute()进行一系列判定,通过tojson()获取到map集合的值,注意的是这里需引入gson.jar包
两种实现方式:
<script type="text/javascript"> function validate(){ //锁定到用户名文本框,并且取值 var val=$('#name').val(); $.post('json/jsontest','name='+val,function(data){ //data就是打回到client的数据 //强制让data从{}语句块形态 ----->表达式 data=eval("("+data.result+")"); //{\"flag\":\"false\"} if(data.flag=="false"){ $("#demo").html("可用"); }else{ $("#demo").html("不可用"); } }); /* $.post('json/jsontest','name='+val,function(data){ //{"result":"{\"flag\":\"false\"}"} data= data.result; data=eval("("+data+")"); if(data.flag=="false"){ $("#demo").html("可用"); }else{ $("#demo").html("不可用"); } },'json'); */ } </script>
实现效果: