Struts 2对Ajax的支持
•Struts 2对Ajax提供了很好的支持
–Struts 2.1提供了基于Dojo的Ajax标签,对Ajax操作进行了进步封装,可以更快捷容易的使用Ajax
•使用Struts 2.1的Ajax标签前必须进行如下操作
1)将struts2-dojo-plugin-2.1.x.x.jar复制到WEB-INF\lib目录
2)在JSP页面中导入Ajax标签
<!-- 引入Ajax标签 --> <%@ taglib uri="/struts-dojo-tags" prefix="sx"%>
3)在JSP页面中加入head标签,负责在页面上导入Dojo所需要的CSS库和JavaScript库
<head> <!-- 在JSP页面中加入head标签 负责在页面上导入Dojo所需要的CSS库和JavaScript库 --> <sx:head /> </head>
Struts 2.1的Ajax标签
|
方法名
|
说 明
|
|
<sx:div>
|
创建一个div区域,可以通过Ajax向其中加载内容,以实现局部刷新
|
|
<sx:submit>
|
通过Ajax来更新某个元素的内容或提交表单
|
|
<sx:a>
|
通过Ajax来更新某个元素的内容或提交表单
|
|
<sx:tabbedPanel>
|
创建一个标签面板,由<s:div>来提供内容。
|
|
<sx:autocompleter>
|
根据用户输入提供输入建议,或者帮助用户自动完成输入
|
|
<sx:tree>
|
创建一个支持Ajax的树形组件(Widget)
|
div标签例子
•使用Ajax技术实现如下需求:
–页面有三个div:div1、div2、div3
–div1的内容每隔5秒时间自动更新一次,每隔30分钟提示用户休息一下(刷新多次)
–开始访问时,在div2中显示欢迎信息(刷新一次)
–整个访问过程中div3中内容保持不变(无刷新)
使用<sx:div>标签来实现
实现代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!-- 引入struts2的标签库 --> <%@ taglib uri="/struts-tags" prefix="s"%> <!-- 引入Ajax标签 --> <%@ taglib uri="/struts-dojo-tags" prefix="sx"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'ajaxTime.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <!-- 在JSP页面中加入head标签 负责在页面上导入Dojo所需要的CSS库和JavaScript库 --> <sx:head /> </head> <body> <s:url id="time" value="time.action" /> <s:url id="welcome" value="welcome.action" /> <!-- 每隔1秒异步访问一次 --> <sx:div href="%{time}" updateFreq="1000" /> <!-- 只异步访问一次 --> <sx:div href="%{welcome}" /> <!-- 无异步访问--> <sx:div> 初始化的内容! </sx:div> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'time.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% //获得当前时间 long currentTime = System.currentTimeMillis(); //取出session中存入的现在时间 Long stratTime = (Long) session.getAttribute("currentTime"); if (stratTime == null) { //第一次访问 session.setAttribute("currentTime", currentTime); } else { //以秒计算计算已用时间 long used = (currentTime - stratTime) / 1000; session.setAttribute("used", used); //当用户浏览网页时间超过60秒则提示用户休息一下。 boolean flag = false; if (used > 60) { flag = true; } session.setAttribute("flag", flag); } %> <s:if test="#session.flag==true"> 你该稍微休息一下了。 </s:if> <s:else> 你已经访问的时间:<s:property value="#session.used" default="0" />秒 </s:else> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" > <struts> <package name="struts2" extends="struts-default" namespace="/" > <action name="time"> <!-- name属性不写默认success --> <result>/time.jsp</result> </action> <action name="welcome"> <result>/welcome.jsp</result> </action> </package> </struts>