研磨Struts2 之 第十八章 使用ajax【私塾在线原创】
视频配套PPT,视频地址【 研磨Struts2视频课程】
Struts2对Ajax提供了非常好的支持,不但功能强劲,而且简单易用。
Struts2并没有自行开发新的Ajax框架,而是使用了目前比较流行的Ajax框架——Dojo和DWR,在他们的基础之上实现了很多常见的功能。同时,Struts2也可以通过插件的形式来使用 JSON,从而使得Ajax的实现更加灵活方便。
事实上,Struts2不需要大家直接去使用Dojo和DWR,而是直接使用Struts2提供的Ajax JSP tags即可。
1 、准备 Action
java代码:
public InputStream getInputStream() throws Exception{
String result = "好的";
result = new String(result.getBytes("UTF-8"));
return new ByteArrayInputStream(result.getBytes());
}
2 、配置 struts.xml
java代码:
<action name="ajax" class="cn.javass.action.AjaxAction">
<result type="stream"></result>
</action>
为了使开发Ajax变得轻松惬意,Struts2提供了一些JSP Tags,通过这些自定义的标签库,使得开发人员无需再写那些繁琐的写法。
要使用Struts2.1的Ajax Tags,需要做以下的工作:
1、把Dojo插件,也就是struts2-dojo-plugin-2.1.8.1.jar文件,复制到WEB-INF/lib文件夹下
2、在页面上增加taglib的引用,<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
3、在每个页面的顶部包含head标签
好了,基本的知识就了解到这里,接下来看看具体如何使用Struts2的Ajax tags。
1 、 head 标签
head标签的地位比较特殊,它的功能是用来下载Dojo文件和相应的Javascript代码,因此所有其他使用Dojo标签的页面都应该包含这个标签。
2 、 div 标签 — 可以当做 body 的 onload 事件
div标签展示为html中的Div元素,但是div标签能够异步的、动态的加载需要展示的内容,而且div标签还提供一个内部的计时器,可以循环的在设定的时间点去重新加载需要展示的内容。
示例:
java代码:
<sx:div href=“/s2/s2/ajax.action" showLoadingText="true" loadingText="正在加载内容,请稍候" errorText="对不起,加载资源失败,请重试" />
3 、 a 标签和 submit 标签
a标签和submit标签的功能是类似的,都能够发起一个Ajax请求,只不过a标签展示为html中的a元素,而submit标签展示成为按钮的形式。两个元素都有一个target的属性,用来指定显示Ajax响应后的信息的元素,通常是一个div元素。
示例:
java代码:
<img id="loadingImage" src="/s2/images/loading.gif" />
<div id="parentDiv">
<s:form action="/s2/ajax.action">
<s:textfield name="account" label="账号"></s:textfield>
<sx:submit targets="parentDiv"
showLoadingText="false" indicator="loadingImage"/>
</s:form>
</div>
4 、 bind 标签
bind标签主要用来把一个事件和事件处理程序关联起来,当然它也可以把一个对象的事件和一个topic联系起来。
示例:
java代码:
<s:div id="showMsg"> </s:div> <input type="button" id="myButton" value="保存"> <sx:bind id="myBind" href=“/s2/s2/ajax.action" sources="myButton" events="onclick" targets="showMsg" />
5 、 datetimepicker 标签
datetimepicker标签主要用来实现一个日期控件,可以表现为一个日历表或者是一个ie时间表。
示例:
java代码:
<sx:datetimepicker adjustWeeks="true" displayFormat="yyyy-MM-dd" toggleType="explode" />
6 、 autocompleter 标签
autocompleter标签实现的是具有自动完成功能的组合框,输入一定的数据后,会出现一个下拉块,里面罗列着一些与输入相关的关键词,你可以通过选择一个来自动完成输入。当然也可以直接点击下拉列表来选择一个值。
在页面初始化的时候,选取一个集合用来初始化组合框。
示例:
准备 Action
java代码:
private List<String> users = new ArrayList<String>();
。。。
public String execute() throws Exception {
users.add("apple");
users.add("ball");
users.add("banana");
return super.execute();
}
autocompleter 标签
java代码:
<sx:autocompleter name="test" list="users" autoComplete="true" />
7 、 textarea 标签
textarea标签用来实现复杂的文本编辑框,类似于大家在邮件系统或是博客系统里面看到的,可以在线编辑的文本框,可以设置一些基本的格式。
示例:
java代码:
<sx:textarea name="test" rows="100" cols="50"></sx:textarea>
8 、 tabbedpanel 标签
tabbedpanel标签用来实现多页签的面板,也被称为tab面板,而且单个面板可以单独关闭,就类似于Eclipse打开开发的源文件一样。
示例:
java代码:
<sx:tabbedpanel id="test" >
<sx:div id="one" label="第一个面板">
<s:form>
<s:textfield name="userId" label="用户编号"/>
<s:textfield name="name" label="用户名称"/>
</s:form>
</sx:div>
<sx:div id="two" label="第二个面板" href="/s2/s2/ajax.action" >
</sx:div>
</sx:tabbedpanel>
9 、 tree 和 treenode 标签
tree标签用来实现在页面展示一个树形结构,它可以包含一个或多个treenode标签。tree标签实现的是一个基于dojo的树。treenode标签里面还可以包含一个到多个treenode标签,形成父子节点。
示例:
1 、父子关系
java代码:
public class Node {
private String id;
private String name;
private List<Node> children = new ArrayList<Node>();
。。。
}
2 、在 Action 中准备数据,准备 Node 之间的关系
亚洲
中国
北京
日本
3 、在页面引用 tree 标签
java代码:
<sx:tree rootNode="depRoot" nodeTitleProperty="name" nodeIdProperty="id" childCollectionProperty="children" />
为了更容易使用JSON,Struts2提供了JSON插件,这个插件提供了名为“json”的ResultType,如果设置某个Result的类型为json,那么JSON插件会把这个Action对象序列化成为一个json格式的字符串,然后再向客户端返回这个字符串。
要使用JSON插件,只需要把struts2-json-plugin-2.1.8.1.jar文件拷贝到WEB-INF/lib里面即可。
可以在<result>中设置root参数,根据ognl表达式取出你需要输出的结果的根对象。
java代码:
<action name="json" class="cn.javass.action.JsonAction">
<result type="json">
<param name="root">user</param>
</result>
</action>
在“CRUD综合运行—初级”的时候,只是简单示例了Struts2的核心知识,与现实中的开发还有很大区别,在这一章中,将逐步的补全,看到在现实的开发中如何运用;另外,也准备将一些新学的知识(如跟Spring融合)融合进去。
基本的示例仍使用增删改查用户信息,业务不变,只是要求更灵活,更规范。下面我们看看都能做出哪些进化:
对原有知识的调整:
原来在写Action的时候, 把一组相关的动作都写在一个 Action 类内,但是各个动作都是以一个public方法的形式出现,并没有一个统一的调度,因此,显得杂乱无章,最后有一个统一的入口,方便程序员以后进行修改。
融合新学的知识:
在真实的项目中,是不会单独使用Struts2的,至少 还需要 上传用户的头像、 显 示男女比例、 在提交之前验证 userId 是否已经被占用了。
由于是继续深化,这章的所有代码都是在“CRUD综合运用—初级”的基础上修改的。
1 、在 Action 中引用 tomcat 的路径
java代码:
String dstFileName = ServletActionContext.getRequest().getRealPath("/heads")
+"/"+user.getUserid()+".gif"
;
2 、在页面上引用已经上传的头像
java代码:
<img src="/crud2/heads/<s:property value="userid"/>.gif" alt="无头像">
视频配套PPT,视频地址【 研磨Struts2视频课程】
浙公网安备 33010602011771号