《研磨struts2》第十四章 对Ajax的支持 之 14.2 Struts2对Ajax的支持
14.2 Struts2对Ajax的支持
14.2.1概述
Struts2对Ajax提供了非常好的支持,不但功能强劲,而且简单易用。
Struts2并没有自行开发新的Ajax框架,而是使用了目前比较流行的Ajax框架——Dojo和DWR,在他们的基础之上实现了很多常见的功能。同时,Struts2也可以通过插件的形式来使用JSON,从而使得Ajax的实现更加灵活方便。
看到这里,可能有些朋友会说:“Dojo和DWR都不会,这可怎么办?”。事实上,Struts2早替大家想好了,不需要大家直接去使用Dojo和DWR,而是直接使用Struts2提供的Ajax JSP tags即可。因此这里并不会涉及Dojo和DWR的知识,有需要的朋友,请参看相应的资料。
当然,如果Ajax JSP tags的功能满足不了你的需要,你可以直接使用原始的Ajax技术,也可以直接使用Ajax的框架,诸如Dojo、JQuery、YUI等等。因为Struts2直接提供一个能直接向客户端返回一个输出流的Result,直接把后台处理后的数据输出回到前台,然后由Ajax来接受和处理这些数据。
14.2.2名为Stream的Result
使用名为Stream的Result来实现跟前面直接使用Ajax的示例一样的功能。
1:实现Action
先看看Action的实现吧,功能跟前面的server.jsp类似,示例代码如下:
public class AjaxAction extends ActionSupport { public String account; public String password; private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { //准备已经注册的数据,测试使用 Set<String> set = new HashSet<String>(); set.add("account1"); set.add("account2"); set.add("account3"); if(set.contains(account)){ inputStream = new ByteArrayInputStream("输入不正确,请重新输入".getBytes("utf-8")); }else{ inputStream = new ByteArrayInputStream("输入正确".getBytes("utf-8")); } return this.SUCCESS; } }
上面的实现中,属性account和password使用来接收前台页面传递过来的参数的,这个很简单,就不多说了。
要注意其中有一个inputstream,还提供了一个getter方法,如下:
private InputStream inputStream; public InputStream getInputStream() { return inputStream; }
这是提供给result用的,result的type是“stream”,顾名思义,返回的不应该是普通的文本而是一个流了。
另外这个流要输出的内容,是在execute方法里面设置的,通过getBytes("utf-8")进行转换,不但得到了byte数组,还顺带解决了传输的中文问题。
2:配置struts.xml
Action实现好了,看看如何来配置它,需要注意result的type,示例代码如下:
<action name="ajaxAction" class="cn.javass.ajax.AjaxAction"> <result type="stream"> <param name="contentType">text/html</param> <param name="inputName">inputStream</param> </result> </action>
配置的参数contentType是指的返回的数据类型,而inputName配置的就是要返回的流,这个值和Action中定义的流类型的属性相对应。
3:修改客户端
客户端几乎没有什么变化,主要就是要修改Ajax提交到后台的路径,示例代码如下:
myRequest.open("GET","ajaxAction.action?account="+account,true);
4:测试运行
可以去测试运行一下了,效果应该和前面是一样的。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4129.html】
欢迎访问http://sishuok.com获取更多内容
相关推荐
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo