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的验证模式已经成功

时间: 2024-10-12 21:37:08

Struts2对AJAX的支持的相关文章

Struts2对AJax的支持(使用JQuery)

使用stream类型的Result实现Ajax 1.视图:test.jsp <%-- Created by IntelliJ IDEA. User: dong Date: 15-4-22 Time: 下午3:26 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="

struts2学习笔记(8)-------struts2的ajax支持

struts2支持一种stream类型的Result,这种类型的Result可以直接向客户端浏览器响应二进制,文本等, 我们可以再action里面生成文本响应,然后在客户端页面动态加载该响应即可. 直接看例子: public class LoginAction { private String user; private String pass; private InputStream inputStream; public InputStream getInput(){ return inpu

struts2发送ajax的几个问题(不使用struts2-json-plugin的情况下)

采用原始方式发送ajax到action时,会遇到get,post的不同,原因是ContentType的问题,ContentType必须是text/html,struts获取到的inputStream才会有值!而默认jquery发送ajax采用的ContentType是application/x-www-form-urlencoded; charset=UTF-8,如果手动设置为json格式进行发送,那么struts2就获取不到数据了,所以在采用Post提交时不用指定ContentType,采用默

Struts2结合Ajax实现登录

前言:Struts2作为一款优秀的MVC框架,和Ajax结合在一起,用户就会有良好的体验,本篇博文我们来模拟一个简单的登录操作,实现Ajax的异步请求,其中Struts2进行的是链接处理,Action动态处理请求,Ajax负责进行异步处理,传送数据与返回数据,其中主要使用的技术有:struts2+Ajax+Jquery+Css,好吧,废话不多说,让我们来看看这个实例吧. 第一步:新建一个Dynamic web project,然后起名:Struts2Ajax,引入相关的jar包,在web.xml

Struts2之ajax初析

Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单,并且可以简单的融入到Struts2框架中,当然这只是在我们需要JSON的时候才会显得流光溢彩. 首先不谈Struts2的原生支持,我们自己写一个ajax示例,使用异步请求,直接请求action动作: InfoAction.java package cn.codeplus.action; import

Struts2对于i18n的支持

1 2 struts.xml中可以配置 3 <constant name="struts.custom.i18n.resources" value="itcast"> 指定全局资源文件 4 全局资源文件/包范围资源文件/动作类的资源文件 5 全局资源文件:src下放到WEB-INF/classes目录下 6 包范围资源文件:服务于Java类中的包下的动作类的. java类访问资源文件 7 取名:package_语言_国家.properties 8 9 动

JavaScript之Ajax-6 Ajax的增强操作(jQuery对Ajax的支持、表单操作)

一.jQuery对Ajax的支持 load() - 作用: 将服务器返回的数据字节添加到符合要求的节点之上 - 用法: $obj.load(请求地址,请求参数) - 请求参数 - "username=tom&age=22" - {'username':'tom','age':22} - 有请求参数时,load方法发送POST请求,否则发送GET请求 get() - 作用: 发送GET类型的请求 - 用法: $.get(请求地址,请求参数,回调函数,服务器返回的数据类型) - 说

博客:Struts2与ajax整合之缺点

之前有篇博客介绍了Struts2与ajax的整合,链接Struts2之-集成Json插件实现Ajax 这里不再累述,看以上博客. 此篇博客想吐槽一下Struts2的缺点--错误处理做的不好,怎么做的不好,哪里做的不好,通过Struts2中Ajax的应用缺陷来介绍. 先提出它的缺点,后面再做出证明. 1,Struts2与Ajax整合的缺点 无论采用$.post还是$.ajax都捕获不到服务器产生的错误($.ajax捕获错误在servlet能做到),是struts2内部设计的不好,不是Ajax的问题

jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML.在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本.随后服务器端返回的数据会根据这个值解析后,传递给回调 函数.可用值: •"xml": 返回