strusts使用ajax,Struts2常用的Ajax标签

Struts2为了简化Ajax过程,提供了一些常用的Ajax标签,对于一些更复杂的Ajax通信过程,我们可以使用JSON插件来实现。

1,div标签

div标签在页面上生成一个div元素,但这个div元素的内容不是静态内容,而是从服务器获取的内容。必须为该div标签指定一个href属性,这个href属性必须是一个action,该action负责生成该div元素的内容。还可以指定该div标签生成的div元素以固定的频率来更新自身的内容,可以指定如下两个属性:

updateFreq:指定更新div的时间间隔,单位是ms,如果不指定,则只在页面加载时更新该div的内容。

delay:指定更新div内容的时间延迟,单位是ms,如果没有指定updateFreq属性,则该属性没有意义。

如果服务器包含了JavaScript代码,且希望在本页面内执行服务器响应的JavaScript代码,则可以为该div标签标签指定executeScripts="true"。

例子的页面代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png远程Div 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png仅一次获取服务器内容的Div 4f1150b881333f12a311ae9ef34da474.png        theme="ajax" 4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{rd}">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png动态更新内容的Div,每隔1s刷新一次(通过指定updateFreq="1000")4f1150b881333f12a311ae9ef34da474.png使用indicator(通过指定indicator="indicator")4f1150b881333f12a311ae9ef34da474.png        theme="ajax"4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{rd}"4f1150b881333f12a311ae9ef34da474.png        updateFreq="1000"4f1150b881333f12a311ae9ef34da474.png        indicator="indicator">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

9b8a8a44dd1c74ae49c20a7cd451974e.png"style="display:none"/>4f1150b881333f12a311ae9ef34da474.png3s之后才开始更新(通过指定delay="3000")4f1150b881333f12a311ae9ef34da474.png指定与服务器交互出错的提示(通过指定errorText属性)4f1150b881333f12a311ae9ef34da474.png指定与服务器交互过程中的提示(通过指定loadText属性)4f1150b881333f12a311ae9ef34da474.png        theme="ajax"4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{rd}"//使用变量来指定URL

4f1150b881333f12a311ae9ef34da474.png        updateFreq="1000"4f1150b881333f12a311ae9ef34da474.png   delay="3000"4f1150b881333f12a311ae9ef34da474.png   errorText="加载服务器数据出错"4f1150b881333f12a311ae9ef34da474.png   loadingText="正在加载服务器内容">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png指定显示系统出错提示(通过指定showErrorTransportText="true")4f1150b881333f12a311ae9ef34da474.png        theme="ajax"4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="/AjaxNoUrl.jsp"4f1150b881333f12a311ae9ef34da474.png        updateFreq="1000"4f1150b881333f12a311ae9ef34da474.png   showErrorTransportText="true"4f1150b881333f12a311ae9ef34da474.png   loadingText="正在加载服务器内容">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png执行服务器脚本(通过指定executeScripts="true")

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png        theme="ajax"4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{test}"4f1150b881333f12a311ae9ef34da474.png        updateFreq="9000"4f1150b881333f12a311ae9ef34da474.png   executeScripts="true"4f1150b881333f12a311ae9ef34da474.png   loadingText="正在加载服务器内容">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

random.action的处理Action和JSP页面内容如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassRandomActionimplementsAction9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngprivateString data;

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getRdmStr()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        String result=String.valueOf(Math.round(Math.random()*10000));

d18c02628675d0a2c816449d98bda930.pngreturndata!=null&&!data.equals("")?data+result : result;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetData(String data)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.data=data;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getData()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnthis.data;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString execute()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnSUCCESS;

ecedf933ec37d714bd4c2545da43add2.png    }8f1ba5b45633e9678d1db480c16cae3f.png}

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png    request.setAttribute("decorator","none");

d18c02628675d0a2c816449d98bda930.png    response.setHeader("Cache-Control","no-cache");//HTTP1.1d18c02628675d0a2c816449d98bda930.png    response.setHeader("Pragma","no-cache");//HTTP1.0d18c02628675d0a2c816449d98bda930.png    response.setDateHeader ("Expires",0);//prevents caching at the proxy server

8f1ba5b45633e9678d1db480c16cae3f.pngSystem.out.println("----------");

4f1150b881333f12a311ae9ef34da474.png%>4f1150b881333f12a311ae9ef34da474.png

服务器返回的随机数字是:

第二个Action是直接的JSP页面,页面包含JavaScript代码,页面内容如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png    request.setAttribute("decorator","none");

d18c02628675d0a2c816449d98bda930.png    response.setHeader("Cache-Control","no-cache");//HTTP1.1d18c02628675d0a2c816449d98bda930.png    response.setHeader("Pragma","no-cache");//HTTP1.08f1ba5b45633e9678d1db480c16cae3f.png    response.setDateHeader ("Expires",0);//prevents caching at the proxy server

4f1150b881333f12a311ae9ef34da474.png%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png8f1ba5b45633e9678d1db480c16cae3f.png    alert('Spring2.0宝典');

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png轻量级J2EE企业应用实战

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png8f1ba5b45633e9678d1db480c16cae3f.png    alert('基于J2EE的Ajax宝典!');

4f1150b881333f12a311ae9ef34da474.png

如果我们不需要该div调用远程Java方法,而是定期执行某个JavaScript函数,则可以为该div标签指定一个handler属性,该属性的值为该JavaScript函数。如下例子JSP页面代码:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png远程Div 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffunctionhandler(widget, node)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png   alert('本地JavaScript函数处理动态Div');

d18c02628675d0a2c816449d98bda930.png   node.innerHTML=Math.random()>0.4?"Spring2.0宝典":"轻量级J2EE企业应用实战";

8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png直接使用本页面的JS函数,不再调用远程服务器 4f1150b881333f12a311ae9ef34da474.png        theme="ajax" 4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{rd}"//此时的href属性无效

4f1150b881333f12a311ae9ef34da474.png   updateFreq="2000"4f1150b881333f12a311ae9ef34da474.png  handler="handler">4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

此外,div标签还可将一个表单里包含的表单域转换成对应的请求参数,并且把这些请求参数发送给远程服务器。为了让一个div标签发送表单里包含的表单域,可以为该div标签指定如下属性:

fromId:该属性的属性值为一个表单元素的ID,表明该div标签会把该表单里的表单域作为参数来发送。

为了通过在JavaScript代码中手动控制div标签启动自动更新,关闭自动更新,则可以为该div标签指定如下两个属性:

startTimerListenTopics:该属性设置一个监听的事件主题,当有Struts2组件向该主题发布事件时,该div标签的计时器被启动。

stopTimerListenTopics:该属性设置一个监听的事件主题,当有Struts2组件向该主题发布事件时,该div标签的计时器被关闭。

例子的JSP页面代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png远程Div 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifvarcontroller=9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif   refresh :function()9b8a8a44dd1c74ae49c20a7cd451974e.png{alert("手动刷新");},

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif   start :function()9b8a8a44dd1c74ae49c20a7cd451974e.png{alert("启动自动刷新");},

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif   stop :function()9b8a8a44dd1c74ae49c20a7cd451974e.png{alert("停止自动刷新");}ecedf933ec37d714bd4c2545da43add2.png};

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//将controller的refresh方法注册成/refresh主题的发布者d18c02628675d0a2c816449d98bda930.pngdojo.event.topic.registerPublisher("/refresh", controller,"refresh");

d18c02628675d0a2c816449d98bda930.png//将controller的start方法注册成/startTimer主题的发布者d18c02628675d0a2c816449d98bda930.pngdojo.event.topic.registerPublisher("/startTimer", controller,"start");

d18c02628675d0a2c816449d98bda930.png//将controller的stop方法注册成/stopTimer主题的发布者d18c02628675d0a2c816449d98bda930.pngdojo.event.topic.registerPublisher("/stopTimer", controller,"stop");

d18c02628675d0a2c816449d98bda930.png//为after主题指定一个事件处理函数97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifdojo.event.topic.subscribe("/after",function(data, type, e)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png   alert('与服务器交互过程中. 现在的过程类型是:'+type);

d18c02628675d0a2c816449d98bda930.png//data : text returnedd18c02628675d0a2c816449d98bda930.png//type : "before", "load" or "error"d18c02628675d0a2c816449d98bda930.png//e    : request object8f1ba5b45633e9678d1db480c16cae3f.png});

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png使用pub-sub机制(通过指定listenTopics等属性)4f1150b881333f12a311ae9ef34da474.png发送表单请求参数(通过指定formId="form")4f1150b881333f12a311ae9ef34da474.png        theme="ajax"4f1150b881333f12a311ae9ef34da474.png        cssStyle="border: 1px solid black;background-color:#dddddd;

4f1150b881333f12a311ae9ef34da474.png    width:300px;height:40px;padding-top:8px;padding-left:20px"4f1150b881333f12a311ae9ef34da474.png        href="%{rd}"4f1150b881333f12a311ae9ef34da474.png   loadingText="正在加载服务器内容

9b8a8a44dd1c74ae49c20a7cd451974e.png"4f1150b881333f12a311ae9ef34da474.png  listenTopics="/refresh"//加载服务器响应

4f1150b881333f12a311ae9ef34da474.png   startTimerListenTopics="/startTimer"//当有startTimer事件发布时启动计数器

4f1150b881333f12a311ae9ef34da474.png   stopTimerListenTopics="/stopTimer"//当有stopTimer事件发布是停止计数器

4f1150b881333f12a311ae9ef34da474.png   updateFreq="9000"4f1150b881333f12a311ae9ef34da474.png  autoStart="true"//加载此页面时自动启动计数器

4f1150b881333f12a311ae9ef34da474.png  formId="form"//指定表单的ID

4f1150b881333f12a311ae9ef34da474.png  notifyTopics="/after">//指定主题名为after,其它的事件都会发布到此主题下

4f1150b881333f12a311ae9ef34da474.png初始化文本

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

2,a和submit标签

a和submit标签的作用几乎完全一样,除了外在的表现不一样(a标签生成一个超链接,submit标签生成一个提交按钮)。它们都是用于向服务器发送异步请求,并将服务器响应加载在指定的HTML元素中,

href:指定单击这两个标签生成的超链接,按钮时发送请求的URL。

targets:该属性指定HTML元素的ID,该属性设置服务器响应来加载到该属性指定的几个HTML元素上。

executeScripts:设置是否执行远程的JavaScript代码。

handler:指定使用本页面的JavaScript函数作为按钮,超链接的单击事件处理函数,如果指定了此属性,则href属性无效。

此外,这两个标签也支持notifyTopics属性,把load事件发布到指定主题。

loadingText:当服务器响应还未成功装载时,targets属性指定的HTML标签显示的内容。

errorText:当与服务器交互之间存在错误时,targets属性指定的HTML标签显示的内容。

form:设置将form属性指定的表单的表单域作为请求参数发送到服务器。

下面是a标签的例子JSP页面代码:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page contentType="text/html;charset=GBK"language="java"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png远程链结 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffunctionbefore()9b8a8a44dd1c74ae49c20a7cd451974e.png{alert("before request");}97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giffunctionafter()9b8a8a44dd1c74ae49c20a7cd451974e.png{alert("after request");}d18c02628675d0a2c816449d98bda930.pngfunctionhandler(widget, node) 

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png   alert('本地自定义函数');

d18c02628675d0a2c816449d98bda930.png   dojo.byId(widget.targetsArray[0]).innerHTML="Spring2.0宝典";

ecedf933ec37d714bd4c2545da43add2.png}97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif    dojo.event.topic.subscribe("/after",function(data, type, e)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png      alert('正处于Dojo的异步交互过程中,类型是:'+type);

d18c02628675d0a2c816449d98bda930.png//data : text returnedd18c02628675d0a2c816449d98bda930.png//type : "before", "load" or "error"d18c02628675d0a2c816449d98bda930.png//e    : request object8f1ba5b45633e9678d1db480c16cae3f.png});

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngDiv 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值