Struts2对AJAX的支持
一、简介
struts2确实一个非常棒的MVC框架。这里部分记述一下struts2对AJAX的支持。实现AJAX有两种方式,一种是使用原生的javascript代码实现,一种是使用第三方的ajax框架(jquery,dwr,dojo等),jquery和dwr比较简单,做项目时也会经常用到。Struts2并没有发明新的AJAX框架,而是使用两个较为流行的框架,即Dojo框架和DWR框架。
Dojo是一个用javascript语言实现的开源DHTML工具包,是一个客户端的AJaX框架,是一个JS的工具集。Struts2提供了一些基于Dojo的标签,支持AjaX功能。
DWR框架是Direct Web
Remoting的缩写。是一个服务端的AjaX框架。他包含服务端Java类库、一个DWR
Servlet以及Javascript库。
struts2对ajaX的集成,主要依赖与ajax主题(theme)实现的。struts2共有三种主题:simple、XHTML、ajax。默认是XHTML主题,ajax主题是XHTML的扩展,并加入了ajax的特性。
二、struts2集成Dojo步骤
第1步:添加jar包
struts2-dojo-plugin-2.1.8.1.jar
第2步:引入标签库(jsp代码)
<%@ taglib uri="/struts-tags"
prefix="s"%>
<%@ taglib uri="/struts-dojo-tags" prefix="sx"
%>
第3步:引入头信息(jsp代码)
<!-- 引入头信息 -->
<sx:head/>
A、FCK的功能
<!-- 使用textarea标签 -->
<sx:textarea name="intro" rows="10" cols="30"
label="介绍"></sx:textarea>
B、自动提示时间功能
<!-- 时间标签
-->
<sx:datetimepicker
name="birth"></sx:datetimepicker>
C、树的功能
<!-- tree-->
<sx:tree label="城市" id="city">
<sx:treenode label="北京"
id="bj">
<sx:treenode label="朝阳"
id="cy"></sx:treenode>
<sx:treenode label="海淀"
id="cy"></sx:treenode>
<sx:treenode label="昌平"
id="cy"></sx:treenode>
</sx:treenode>
<sx:treenode label="河北"
id="bj">
<sx:treenode
label="石家庄"></sx:treenode>
<sx:treenode
label="保定"></sx:treenode>
<sx:treenode label="张家口">
<sx:treenode label="怀安县">
</sx:treenode>
<sx:treenode
label="万全县"></sx:treenode>
<sx:treenode
label="尚义县"></sx:treenode>
<sx:treenode
label="张北县"></sx:treenode>
</sx:treenode>
</sx:treenode>
<sx:treenode label="河南"
id="bj"></sx:treenode>
</sx:tree>
D、自动提示功能
<!-- autocompleter 自动完成-->
<sx:autocompleter name="sle"
list="{'abc','abcd','abcde','abcdef','abcdefg'}">
</sx:autocompleter>
三、Struts2 集成DWR
步骤(
dwr
全面解析:http://blog.csdn.net/zhaizhanpo/article/details/2988512)
DWR包含 2个主要部分:
(1) 一个运行在服务器端的Java
Servlet,它处理请求并且向浏览器发回响应。
(2)
运行在浏览器端的JavaScript,它发送请求而且还能动态更新网页。
DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java
到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。
下载与配置DWR
1)在web应用中加载DWR的Jar包
目前2.0尚不支持struts2
如果是用dwr2.0的jar包,还需要同时导入log4j.jar和commons-loggin.jar包
2)配置web.xml文件(配置DWR的核心Servlet,该Servlet负责将服务器端的Java方法暴露出来)
<!-- 在web.xml中配置的Dwr的核心Servlet
-->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
3)在WEB-INF/lib目录下
,创建dwr.xml文件。Java方法被暴露出来了,但是具体要暴露哪些方法,需要在dwr.xml中配置被暴露的方法。
<?xml
version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: dwr -->
<!DOCTYPE dwr PUBLIC
"-//GetAhead
Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new"
javascript="validator">
<param name="class"
value="org.apache.struts2.validators.DWRValidator"
/>
</create>
<convert converter="bean"
match="com.opensymphony.xwork2.ValidationAwareSupport"
/>
</allow>
<signatures>
<![CDATA[
import java.util.Map;
import org.apache.struts2.validators.DWRValidator;
DWRValidator.doPost(String, String, Map<String,
String>);
]]>
</signatures>
</dwr>
dwr.xml配置文件中,将org.apache.struts2.validators.DWRValidator类创建成一个JavaScript
对象,名为validator。DWR框架提供中方式,允许客户端调用validator的方法时,转换成调用DWRValidator实例的方法。
4)建立前台Jsp登陆页面
<%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"
%>
<%
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 'index.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>
<s:head
theme="ajax"/> <--也可以放在头部,或者任意位置-->
<s:form method="post" action="rs" validate="true"
theme="ajax">
<s:textfield label="用户名" name="username"
/>
<s:password label="密码"
name="password"></s:password>
<s:textfield label="年龄"
name="age"></s:textfield>
<s:submit value="注册" />
</s:form>
</body>
</html>
注意的是:需要将表单设置为Ajax主题,并且设置validate="true".当某个输入组件失去焦点时,系统将负责将输入内容发送到服务器端进行校验。
5)建立Action类
import
com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class ReAction extends ActionSupport {
private
String username;
private
String userpass;
private int
age;
public int
getAge() {
return
age;
}
public void
setAge(int age) {
this.age =
age;
}
public
String getUsername() {
return
username;
}
public void
setUsername(String username) {
this.username = username;
}
public
String getUserpass() {
return
userpass;
}
public void
setUserpass(String userpass) {
this.userpass = userpass;
}
public
String execute() throws Exception{
return
SUCCESS;
}
}
6)建立相应的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>
<constant name="struts.devMode"
value="true"></constant>
<constant name="struts.il8n.encoding"
value="gbk"></constant>
<package name="ge"
extends="struts-default">
<action
name="rs" class="com.zhuxuli.action.ReAction">
<result
name="input">/index.jsp</result>
<result
name="success">/success.jsp</result>
</action>
</package>
</struts>
7)现在一个完整的登陆流程都写完了,最后差的一点就是需要在action包下面配置一个校验文件了
注意,本流程是用户登陆的Ajax验证,文件名为:“action类名-validation.xml”
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator
type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>
<field name="userpass">
<field-validator
type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field><field
name="age">
<field-validator type="int">
<param
name="min">1</param>
<param
name="max">100</param>
<message>年龄必须在1到100之间</message>
</field-validator>
</field>
</validators>
现在一个完整的DWR in struts2的验证模式已经成功
Struts2对AJAX的支持的更多相关文章
- Struts2之ajax初析
Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单, ...
- Struts2结合Ajax实现登录
前言:Struts2作为一款优秀的MVC框架,和Ajax结合在一起,用户就会有良好的体验,本篇博文我们来模拟一个简单的登录操作,实现Ajax的异步请求,其中Struts2进行的是链接处理,Action ...
- struts2实现ajax校验的2种方法
共同的一点是,Action都需要将一个方法暴露出来,给前端javascript调用 javascript的代码都是一样的: Js代码 function testAjax() { var $use ...
- struts2中ajax的使用
前面写过原生js实现ajax的博客,但是用起来不是太方便,jquery对原生的js进行了很好的封装,使用起来也更简单:但是在项目中使用了struts2,处理ajax却又不同,花了几天时间研究,终于解决 ...
- struts2发送ajax的几个问题(不使用struts2-json-plugin的情况下)
采用原始方式发送ajax到action时,会遇到get,post的不同,原因是ContentType的问题,ContentType必须是text/html,struts获取到的inputStream才 ...
- Struts2与Ajax的整合
整合: 导入jar包 sturts2-json-plugin-2.1.8.1.jar 说明: 在该jar包中有struts-plugin.xml文件 <struts> ...
- Struts2对Ognl的支持
Struts2对Ognl的支持 一. 写作背景 由于工作性质的变化,最近一直在研究struts2,从 ...
- Struts2与ajax整合之缺点
之前有篇博客介绍了Struts2与ajax的整合,链接Struts2之-集成Json插件实现Ajax 这里不再累述,看以上博客. 此篇博客想吐槽一下Struts2的缺点--错误处理做的不好,怎么做的不 ...
- MVC4 5分页控件,支持Ajax AjaxOption支持
MVC4 5分页控件,支持Ajax AjaxOption支持 /// <summary> /// MVC4 5分页控件,支持Ajax AjaxOption支持 beta 1.0 /// 用 ...
随机推荐
- Linux进程间通信—共享内存
五.共享内存(shared memory) 共享内存映射为一段可以被其他进程访问的内存.该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中.共享内存是最快的IPC机制,但由于linux本身 ...
- 查看DNS主机名解析的主机IP并向DNSserver进行DNS域名解析
一.查看DNS主机名解析的主机IP host 命令 用途 把一个主机名解析到一个网际地址或把一个网际地址解析到一个主机名. 语法 host [-n [ -a ] [ -c Class] [ -d ] ...
- Hibernate 实体关联关系映射(转载)
原文链接地址:http://lavasoft.blog.51cto.com/62575/39398/ Hibernate:Hibernate关联关系映射实例速查 Hibernate关联关系映射目录 ...
- SPSS Clementine 数据挖掘入门2
下面使用Adventure Works数据库中的Target Mail作例子,通过建立分类树和神经网络模型,决策树用来预测哪些人会响应促销,神经网络用来预测年收入. Target Mail数据在SQL ...
- 为运行SQL Server的虚拟机切换装有DB Logs的最佳实践
上一篇说到虚拟机启动不了, 原因是有一块VHDX的文件找不到了. 解决了这个问题之后, 又遇到了另一个问题, 那就是我的这台SQL Server的虚机启动之后, 我的几个重要database变成了su ...
- 这两天对OKR简单总结
依据两天的学习对OKR进行一个总结. 1.OKR的本质是目标管理. 公司制定公司的战略目标,须要全体员工都可以聚焦到这个目标上来而且形成最大的合力. 公司制定公司层面的OKR.然后员工依据公司的目标. ...
- linux sendmail 邮件服务器架设
大家都知道架邮件服务器首先要架DNS服务.架设sendmail邮件服务器,以供大家一起学习探讨. 步骤一, 安装SNEDMAIL服务,查看你是否有安装SENDMAIL. #rpm -qa|grep b ...
- 【C/C++】Linux C,关于刷新printf输出问题
直接描述吧:int i = 0;while(1){printf("now i = %d\r", i);fflush(stdout);i++;sleep(1);}我想在输出中不仅仅是 ...
- mahout运行测试与kmeans算法解析
在使用mahout之前要安装并启动hadoop集群 将mahout的包上传至linux中并解压即可 mahout下载地址: 点击打开链接 mahout中的算法大致可以分为三大类: 聚类,协同过滤和分类 ...
- PHP 正则表达式(PCRE)
PHP 正则表达式(PCRE) 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串 ...