struts2整合ajaxanywhere

本文介绍如何将Struts2框架与AjaxAnywhere库进行整合,实现无刷新的数据交互。主要内容包括配置Struts2和AjaxAnywhere所需的web.xml及struts.xml文件、编写Action类以及创建JSP页面。

很少写博客,最近发现大家都很兴趣整合struts2和ajaxanywhere都出现问题.下面我来记录下我配置并成功运行的经验:

1、首先配置struts2、这个是必须的。我来简单的把配置和部分代码粘贴上来吧:

web.xml配置(我这里用的struts2.0+的,是懒得去下载2.1了,如果你是用2.1把你的过滤器改下其他类就好了):

<display-name>Struts Showcase Application</display-name> <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter> <filter-name>AjaxAnywhere</filter-name> <filter-class>org.ajaxanywhere.AAFilter</filter-class> </filter> <filter-mapping> <filter-name>AjaxAnywhere</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AjaxAnywhere</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>org.apache.struts2.showcase.person</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

注意上面的配置、我已经把ajaxanywhere放上了,记得把ajaxanywhere的过滤器放在所以过滤器的最前面、因为这些过滤链中,我想一开始就先用它过滤、还有就是struts2的过滤器要改到合适你的版本哦。

2、我们接下来简单的配置下struts.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="test" extends="struts-default"> <action name="test" class="com.test.TestAction"> <result name="success">/index.jsp</result> </action> </package> </struts>

这是我简单的配置了struts.xml文件

3、接下来就是我们的action类了

package com.test; import com.opensymphony.xwork2.ActionSupport; public class TestAction extends ActionSupport { private static final long serialVersionUID = -479427231759775671L; private String name; private String outName; @Override public String execute() throws Exception { return super.execute(); } public String getNameValue() { this.setOutName(this.getName()); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOutName() { return outName; } public void setOutName(String outName) { this.outName = outName; } }

这段代码很简单、其中一个值就是页面传过来的、另外一个值是我从传过来的值赋给它、最后在页面展示;

4、接下来就是jsp页面了

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib prefix="aa" uri="http://ajaxanywhere.sourceforge.net/"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <mce:script type="text/javascript" src="js/aa.js" mce_src="js/aa.js"></mce:script> </head> <body> <form action="test!getNameValue.action" method="post"> <input type="text" name="name" /><br /> <!-- <input type="button" onclick="submitTest();" value="submit"><br /> --> <input type="submit"/><br/> <aa:zone name="refleshZone"> ${outName }<br /> </aa:zone> </form> </body> <mce:script type="text/javascript"><!-- function submitTest() { ajaxAnywhere.submitAJAX(); } ajaxAnywhere.getZonesToReload = function() { return "refleshZone"; } // --></mce:script> </html>

注意:记得在下载的ajaxanywhere包里面取出aa.js到你的项目中来。

这段代码我又两个部分让你看到用ajaxanywhere提交和直接提交的效果。如果你用的直接提交(因为第一个值我没有hidden也没有用struts2的标签)提交后第一个值就不保存了、如果你用ajaxanywhere提交则会存在、因为我没有刷新它、呵呵。到这里应该例子差不多了


注:转载必须声明出处

AjaxAnywhere的类库及其用法 AjaxAnywhere使用一个名为aa.js的Javascript文件来处理客户端的全部Ajax操作,包括初始化XMLHttpRequest、获取表单内容、发送Ajax请求、执行回调函数等。aa.js也是使用AjaxAnywhere之前必须了解的,至少应该知道其经常用到的API。Ajax Anywhere的官方网站提供了相应的Javascript Document,方便快速查找和了解这些API。 1.AjaxAnywhere的初始化 aa.js中定义了一个AjaxAnywhere对象,针对Ajax的各种操作被抽象成AjaxAnywhere对象的方法,通过这些对象方法完成所需的操作。必要的时候,可以重载这些方法,以便满足个性化的需求。在aa.js文件的末端,AjaxAnywhere对象使用默认的构造方法完成对象实例化。 ajaxAnywhere = new AjaxAnywhere(); ajaxAnywhere.bindById(); 所以,所有引用aa.js的页面都可以在Javascript代码段中使用AjaxAnywhere对象的实例ajaxAnywhere。 当AjaxAnywhere初始化的时候,它在默认的构造函数中完成XMLHttpRequest对象的创建,并保存在AjaxAnywhere对象属性req中。AjaxAnywhere对象默认的构造方法如例程11-23所示。 例程11-23 AjaxAnywhere对象的默认构造方法 function AjaxAnywhere() { this.id = AjaxAnywhere.defaultInstanceName;//id,用于生成更新区域的编号等用途 this.formName = null;//页面表单名称 this.notSupported = false;//是否支持Ajax this.delayBeforeContentUpdate = true;//在更新页面内容之前是否延迟 this.delayInMillis = 100;//延迟时间 //初始化XMLHttpRequest对象--req if (window.XMLHttpRequest) { this.req = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { this.req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { this.req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e1) { this.notSupported = true; /* XMLHTTPRequest not supported */ } } } //确定浏览器是否支持Ajax if (this.req == null || typeof this.req == "undefined") this.notSupported = true; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值