Struts
与
dojo
整合研究
1,
Struts
的
dojo
标签
Struts
框架有一些
Ajax
的插件,例如:
·
Ajax Parts
- The
AjaxParts Taglib (APT)
is a component of
the Java Web Parts (JWP) project (
http://javawebparts.sourceforge.net
) that allows for
100% declarative
(read: no Javascript coding required!) AJAX functionality
within a Java-based webapp.
·
Dojo
- The
Ajax Tags Dojo Plugin
was represented as a theme for Struts 2.0.
For Struts 2.1, the Dojo tags are bundled as a plugin.
·
YUI
– The
Yahoo User Interface (YUI) Plugin
has only a few
tags are available so far, but the YUI tags tend to be easier to use than the
Dojo versions.
·
jQuery
- The
jQuery Plugin
provide ajax
functionality and UI Widgets an JavaScript Grid based on the jQuery javascript
framework..
其中
Ajax Tags Dojo Plugin
在
struts2.1
中已经被废除了,主要是由于
dojo
之前的版本不稳定,最新的
dojo
插件
(
struts2-dojo-plugin-2.2.3.jar
)
也只支持
dojo0.4
版本的核心,一共
11
个标签
,如果不用
struts
的
dojo
标签就设计到数据转换的问题,下面第
2
点说明。
2,
struts
与
dojo
的数据转换方法
1)
json
格式的数据比
xml
在
web2.0
的应用中性能要好,主要是因为
javascript
对
json
的解析和序列化比
xml
要方便,因此考虑用
json
做前后端的数据传输格
式。另外由于后端处理
request
的时候和是否是
Ajax
请求并无关系,主要是在后台返回
response
的时候,前台的
script
对数据格式有一定的要求,所以本文主要
分析后台在应用
Struts
之后返回
json
数据给前台的处理方法。
2)
那么在前台与后台传输
json
格式的数据时候,关于后台的数据转换问题,有几种常做的方法
:
a,
让
Struts
直接返回
stream
给前台,做法是:应用
Struts
的
”stream”
这种
result type
,让
action
返回一个
inputStream
给前台,这个
stream
里写一个
json
格式的字符串,其中
json
格式的字符串,可以在后台拼字符串,或者应用
json
格式转换插件将
object
转换成
json
格式的字符串,这样的
开源插件有很多种(
http://json.org/
网站上有各种序列化
json
的插件的链接)。
b,
让
Struts
直接返回一个
JSON
的
response
,这需要使用
JSON
插件!
JSON
插件提供了一种名为
json
的Action Result
Type
。一旦为Action
指定了该
结果处理类型,JSON
插件就会自动将Action
里的数据序列化成JSON
格式的数据,并返回给客户端物理视图的JavaScript
。简单的说,JSON
插件允许我们在JavaScript
中
异步的调用Action
,而且Action
不需要指定视图来显示Action
的信息显示。而是由JSON
插件来负责具体将Action
里面具体的信息返回给调用页面。
3,
Jsonplugin
的用法
(https://cwiki.apache.org/confluence/display/WW/JSON%20Plugin
)
在反序列化时,我一直没有试出来,最后在研究struts2-json-plugin-2.2.3.jar插件的源码之后,发现这个插件的反序列化做的还是比较粗放的,不能精确的反序列化对象,最后
还是用struts2的域模型驱动来实现的这个功能。
下面来看代码:
1,所需jar包:
(主要是struts的jar包和jsonplugin的jar包,有一些别的包是做其他实验用的)
2, Action的代码:
package com.action;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.struts2.json.annotations.JSON;
import com.bean.Address;
import com.bean.Movie;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class JSONExample extends ActionSupport{
private String field1 = null;
private int[] ints = { 10, 20 };
private Map<String , Movie> map = null;
private String customName = "custom";
private Movie movie = null;
private List<Movie> movieList = null;
private Date todayDate = new Date();
// 'transient' fields are not serialized
private transient String field2;
// fields without getter method are not serialized
private String field3;
public String execute() {
System.out.println("execute method begin!");
System.out.println("map 是 "+getMap().getClass().getName()+"类型");
System.out.println("map = "+getMap());
System.out.println("movieList 是 "+getMovieList().getClass().getName()+"类型");
System.out.println("movieList = "+getMovieList());
System.out.println("execute method end!");
return Action.SUCCESS;
}
// @JSON(serialize=false)
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public int[] getInts() {
return ints;
}
public void setInts(int[] ints) {
this.ints = ints;
}
public Map getMap() {
return map;
}
public void setMap(Map<String, Movie> map) {
this.map = map;
}
//@JSON(name = "newName")
public String getCustomName() {
return this.customName;
}
public Movie getMovie() {
return movie;
}
public void setMovie(Movie movie) {
this.movie = movie;
}
public List getMovieList() {
return movieList;
}
public void setMovieList(List<Movie> movieList) {
this.movieList = movieList;
}
@JSON(format="yyyy/MM/dd")
public Date getTodayDate() {
return todayDate;
}
public void setTodayDate(Date todayDate) {
this.todayDate = todayDate;
}
}
3,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"/>
<package name="stream" extends="json-default">
<action name="JSONExample" class="com.action.JSONExample">
<result type="json">
<!--
<param name="root">
moive
</param>
<param name="excludeProperties">
moive,field1
</param>
<param name="ignoreHierarchy">
false
</param>
-->
</result>
</action>
</package>
</struts>
这里配置好之后,在前台请求JSONExample之后struts2就会返回json格式的数据给前台了!至于dojo怎么处理这个json格式的数据那就是你的事了!其实这个例子就是wiki文档的例子,我自己做了一些实验而已,jsonRPC的应用也是一个不错的研究点,下次有心得还是会和大家一起分享讨论!
下面的源码是核心源码,jar包和dojo大家可以自己下载。我用的是struts2 2.2.3版得dojo是1.6.1的,其中需要说明的是,struts2的不同版本需要不同的jsonplugin插件,一般自带的包里就可以。
主要源码在附件中下载:
附录:
1
,在后台可以用
json_java
包
做parse Java
to json的工作!
2
,
json-lib-2.1-jdk15.jar
也是一个后台做
json
和
java
对象之间转换的包,
struts
文档有介绍!
3
,
jsonplugin-0.34.jar
包是做转换和提供
json result type!
struts2-json-plugin-2.2.3.jar
的包结构与上面的包结构一么一样,是同样的功能,不同的开源项目?
这两个包都
Provides a
result type 'json' that serializes an action into JSON, and a 'json'
interceptor that populates an action form a request containing a json string.
4
,
struts2jsonresult.jar
提供
json result type!是另外一种做json序列化的选择,有兴趣的可以去wiki上看看文档 http://code.google.com/p/struts2jsonresult/w/list
It provides a
"json" result type that serializes beans into JSON!
jsonplugin(
jsonplugin-0.34.jar,
struts2-json-plugin-2.2.3.jar
)与
struts2jsonresult.jar
的
Difference
:
-
No interceptor is provided by this plugin, only the json result type
is provided.
-
more powerful include/exclude patterns are supported(thanks to the
features of flexjson)
存在的问题:
1,
反序列化未实现,即前台
dojo
直接发
json
的数据格式的请求,让
jsonplugin
自动序列化成
java
对象的工作。但可用struts2的域模型驱动来做,比较好做,jsonplugin插件并不是最佳的反序列化的选择!
2,
调研
jsonRPC
的应用(之后会上传,期待你的关注哦^_^)
3, 本文源码文件也许没有组织好,文章也写的比较粗放,欢迎大家指正!
- 大小: 33.8 KB
分享到:
相关推荐
这个"struts2+dojo ajax实现小例子"可能包含了这些基本的整合过程,你可以通过查看解压后的源码,了解具体的实现细节。它是一个很好的学习资源,可以帮助你理解Struts2和Dojo如何协同工作,如何在实际项目中实现高效...
在Struts2与Dojo整合时,通常会使用Struts2的dojo-plugin来处理JSON数据,以实现Dojo组件与后台的通信。 然后,iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,使得开发者能够更加灵活地处理数据库查询。...
本示例整合了jQuery 1.4版本框架,同时也使用dojo框架来完成struts2的属性页标签。 使用jQuery与Struts2可以非常轻松的编程。如果你熟悉jQuery框架,那么你可以“让程序飞一会儿”吧。。。^_^ 阅读对象:熟悉Struts ...
Struts2与Dojo的整合,可以让后端的业务逻辑与前端的用户交互无缝对接。通过Struts2的Action,可以方便地将服务端数据传递到Dojo的视图组件,同时,Dojo的AJAX功能可以轻松调用Struts2的Action方法,实现动态更新和...
7. **插件架构**:Struts 2的插件体系使得扩展和定制变得简单,如 strut2-dojo-plugin 提供了与Dojo JavaScript库的集成。 整合Struts 1和Struts 2涉及到的主要工作包括: 1. **Action映射**:将Struts 1的Action...
- **Struts2-dojo-plugin**:提供了与Dojo JavaScript库的集成,便于创建富客户端应用。 - **Struts2-convention-plugin**:自动配置Action,简化XML配置文件,遵循约定优于配置的原则。 - **Struts2-json-plugin...
- **struts2-spring-plugin.jar**:用于Struts2与Spring的整合,提供Action类的依赖注入功能。 - **struts2-tiles-plugin.jar**:集成Tiles布局框架,方便页面的组织和复用。 - **struts2-json-plugin.jar**:...
这个"struts2整合源码1"压缩包很可能包含了一个完整的Struts2项目,以及与之相关的数据库SQL2005脚本,帮助开发者理解和学习Struts2框架的集成和实际应用。 首先,让我们深入了解Struts2框架的关键特性: 1. **MVC...
同时,Struts2.x具有丰富的插件生态系统,如Struts2-dojo-plugin、Struts2-jquery-plugin等,可以方便地集成JavaScript库,增强前端交互体验。 总的来说,Struts2.x是一个强大且成熟的Web开发框架,它通过清晰的...
Struts2、Spring、JPA、Ajax 和 Dojo 是五个在Web开发中常见的技术框架,它们结合使用可以构建高效、灵活且功能丰富的应用程序。在这个"Struts2 Spring Jpa Ajax Dojo crud小例子"中,我们将深入探讨这些技术如何...
将Struts2.0与Freemarker整合,可以创建动态Web应用,提供灵活的视图呈现。 **一、Struts2.0框架概述** Struts2.0是Struts1.x的升级版,基于拦截器模型,提供了更强大的控制层。它包含了Action、Interceptor、...
Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它的主要目的是提供一个用于构建企业级Web应用程序的MVC(Model-View-Controller)架构。Struts2的版本2.5.22是其稳定且功能丰富的版本之一,...
接下来,我们关注Struts2.0与Spring的整合。Spring是一个全面的Java企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)等功能。整合Struts2和Spring的主要目的是实现更灵活的控制层和更好的服务管理。 1. ...
下面将详细阐述如何整合Struts2.1与Hibernate3.2,以及涉及的相关知识点。 首先,了解Struts2.1:这是一个基于ApacheJakarta Struts的下一代MVC框架。它提供了一种模型驱动的方法来开发Web应用程序,允许开发者使用...
3. **Struts2 Dojo**:这是一个与Ajax相关的包,提供了与Dojo JavaScript库的集成,便于在Struts2应用中实现异步交互和动态更新。 4. **Struts2 Servlets**:这部分包括了与Servlet容器(如Tomcat)的集成,处理...
Struts2是一个强大的Java web开发框架,用于构建和维护可扩展、...同时,它还能帮助你熟悉Struts2与其他技术(如数据库访问、Spring整合等)的集成。通过深入研究和实践,你可以熟练掌握这个流行的Java web开发框架。
1. Struts2的核心库,包括struts2-core、struts2-convention-plugin、struts2-dojo-plugin等,用于实现MVC架构和扩展功能。 2. Spring的各模块库,如spring-context、spring-beans、spring-webmvc等,提供DI、AOP等...