- 浏览: 162171 次
- 性别:
- 来自: 大连
最新评论
-
撒旦的堕落:
<div class="quote_title ...
★Struts2中的Ajax实现 <s:a> Ⅱ -
撒旦的堕落:
<div class="quote_title ...
★Struts2中的Ajax实现 <s:a> Ⅱ -
crazyj2ee:
[img][/img]
flex 3 从页面url中取参数取值的完美解决方案 -
suixinsuoyu12519:
你好,请问 “Update的系统内部执行情况可以参照附文:对u ...
Update优化小结 -
04023129:
试下 把wc.preSharedKey = "pa ...
设置 Android wifi连接 samples【转】
实用JSON在Struts2中实现AJax这篇文章是抄袭Max大哥的。呵呵
在当今——Web 2.0概念铺天盖地的Internet环境下,简易的AJAX集成对于一个成功的WEB框架来说是不可或缺的。因此,Struts 2其中的一个重要的功能(Feature)就是“First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags(大意:一流的AJAX支持 ——通过AJAX标志增加互动性和灵活性,而且使用这些AJAX标志与普通的Struts标志同样简单)”。
实现原理
基于不重新发明轮子的原则,Struts 2并没有开发新的AJAX框架,而是使用时下Java EE平台中比较流行的AJAX框架——Dojo和DWR。
最近在Musachy Barroso等同志的无私奉献下,开发了Struts 2的JSON插件(Plugin),极大地方便了我们输出JSON结果(Result)。
JSON插件(Plugin)
在Struts 2的showcase中的AJAX部分,JSON的结果输出是通过Freemaker模板实现。这种方法在简易性和灵活性上都比不上JSON插件,所以JSON插件值得向大家五星推荐。
下面让我们看一个JSON插件的例子。
首先到以下网址http://code.google.com/p/jsonplugin/downloads/list 下载JSON插件的JAR包,并将其加入你的WebContent\WEB-INF\lib下。
接下是本例子的Action代码:
import java.util.ArrayList;
import java.util.List;
import com.googlecode.jsonplugin.annotations.JSON;
import com.opensymphony.xwork2.ActionSupport;
public class JsonPluginAction extends ActionSupport {
private static final long serialVersionUID = - 6784977600668791997L ;
private int bookId;
private String title;
private double price;
private List < String > comments;
private transient String secret1;
private String secret2;
@JSON(name = " ISBN " )
public int getBookId() {
return bookId;
}
public void setBookId( int bookId) {
this .bookId = bookId;
}
public List < String > getComments() {
return comments;
}
public void setComments(List < String > comments) {
this .comments = comments;
}
public double getPrice() {
return price;
}
public void setPrice( double price) {
this .price = price;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this .title = title;
}
@Override
public String execute() {
bookId = 15645912 ;
title = " Max On Java " ;
price = 0.9999d ;
comments = new ArrayList < String > ( 3 );
comments.add( " It's no bad! " );
comments.add( " WOW! " );
comments.add( " No comment! " );
secret1 = " You can't see me! " ;
secret2 = " I am invisible! " ;
return SUCCESS;
}
}
清单1 src/tutorial/JsonPluginAction.java
以上代码值得注意的是,通过@JSON的JAVA注释(Annotation),我们可以改变JSON结果的属性名称,另外带有transient修饰符与没有Getter方法的字段(field)都不会被串行化为JSON。
然后,我们来配置一下此Action,代码如下:
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< package name ="Struts2_AJAX_DEMO" extends ="json-default" >
< action name ="JsonPlugin" class ="tutorial.JsonPluginAction" >
< result type ="json" />
</ action >
</ package >
</ struts >
清单2 src/struts.xml
上面配置文件的“package”元素和以往不同的是,它扩展了“json-default”而不是“struts-default”。“json-default”是在jsonplugin-0.11.jar包里的struts-plugin.xml中定义的。该文件同时定义了“json”的结果类型,有兴趣的朋友可以打开此文件看看。
发布运行应用程序,在浏览器中键入:http://localhost:8080/Struts2_Ajax/JsonPlugin.action ,出现下载文件对话框,原因是JSON插件将HTTP响应(Response)的MIME类型设为“application/json”。把文件下载下来,用记事本打开,内容如下:
清单3 例子1输出的JSON串
当然这还不是一个完整的AJAX的例子,下面让我们写一个HTML文件将其完成,HTML代码如下:
pageEncoding = " utf-8 " %>
<% @ taglib prefix = " s " uri = " /struts-tags " %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< title > JSON Plugin </ title >
< s:head theme ="ajax" />
< script type ="text/javascript" >
dojo.addOnLoad( function () {
dojo.event.topic.subscribe('retrieveBook', this , function (data, type, e){
if (type == 'load') {
showBook(data);
} else if (type == 'error') {
alert('Can not retrieve the book');
}
});
});
function showBook(strBook) {
var oBook = eval('(' + strBook + ')');
var bookHolder = document.getElementById('bookHolder');
var sBook = ' < p >< b > ISBN: </ b > ' + oBook.ISBN + ' </ p > ';
sBook += (' < p >< b > Title: </ b > ' + oBook.title + ' </ p > ');
sBook += (' < p >< b > Price: </ b > $' + oBook.price + ' </ p > ');
sBook += (' < b >< i > Comments: </ i ></ b >< hr /> ');
for (i = 0 ; i < oBook.comments.length; i ++ ) {
sBook += (' < p >< b > #' + (i + 1 ) + ' </ b > ' + oBook.comments[i] + ' </ p > ');
}
bookHolder.innerHTML = sBook;
}
</ script >
</ head >
< body >
< s:url id ="bookUrl" value ="/JsonPlugin.action" />
< s:submit href ="%{bookUrl}" theme ="ajax" indicator ="indicator"
value ="Retrieve Book" align ="left" notifyTopics ="retrieveBook" />
< s:a theme ="ajax" href ="%{bookUrl}" indicator ="indicator"
notifyTopics ="retrieveBook" > Retrieve Book </ s:a >
< img id ="indicator"
src ="${pageContext.request.contextPath}/images/indicator.gif"
alt ="Loading " style ="display:none" />
< div id ="bookHolder" ></ div >
</ body >
</ html >
清单5 WebContent/LinkButton.jsp
可能上述代码还不够简洁,因为我将HTML格式化的工作都放在Javascript中完成。但如果你的XHR返回的是HTML片段,你可以简单地将<s:a
/>或<s:submit />的“targets”属性设为“bookHolder”即可,详情大家可以参考Struts 2
Showcase。至于返回HTML片段,可以通过Action + Freemaker完成。
对于这个var
oBook
=
eval('('
+
strBook
+
')');
这个方法有点不大理解的地方。他好像是将返回的都有数据都看作一个类来对待。自动创建一个对象。
当我们返回的结果是对象的时候,会出现一个小问题。
例如:我们返回上一篇文章(http://04023129.iteye.com/admin/blogs/269823)中的Article对象的话,
返回的结果是{"article":{"content":"新聞内容4","title":"新聞標題4"}}
得到返回的data
var returnValue= eval('(' + data + ')');
alert(returnValue.article.title);
使用 eval('(' + data + ')');的时候dojo他将返回的数据创建成只有一个属性(article)的returnValue类
如果你想得到返回的新闻标题的时候就必须再调用属性article中的title属性。
不知道有没有什么好的解决方法,能直接得到article类
评论
引用引用引用引用引用引用引用引用引用引用引用引用引用引用引用引用引用[u][u][u][b][b][b][b][b][b][i][i][i][i][i][i][i][i][i][b][/b][/u][/qu]
发表评论
-
如何在Mac OS中安装 wget
2012-07-09 22:50 28570刚入手Macbook pro。说实话日本的比国内的真的便宜好的 ... -
Android开发片段 WebView
2012-02-06 14:55 1206/** Called when the activity i ... -
Office文档在线查看解决方案
2012-02-03 12:57 4714本文使用的是office软件自带的Save as 功能 自动存 ... -
事务添加的位置问题 工作总结
2010-07-13 10:44 895今天在公司的开发的框架上做了一个应用,才意识到一个问题,原来这 ... -
一个简单的JavaScript 框架
2009-08-25 15:38 1051这几天做新项目,做了一个简单的JS验证框架,分享一下,欢迎大家 ... -
如何在android中使用你自己的数据文件
2009-08-19 09:45 5723Most all of the Android example ... -
解决EXT 与prototype 框架冲突问题
2009-08-10 11:59 1363很简单,只需要将prototype框架放在最前面就可以了 -
POI设置rightHead的Page和Date的fangfa
2009-05-19 14:36 1028&6Page:&P Date:&D -
Oracle表段中的高水位线HWM
2009-05-03 09:53 1435在Oracle数据的存储中,可以把存储空间想象为一个水库, ... -
Django 小例子
2009-04-18 21:35 2293最近想学习python,尤其是Django,本来照着Step ... -
ORACLE 表和数据完全COPY
2009-04-17 15:52 1002create table new_tab as ... -
Oracle pl/sql 中实现 continue
2009-02-01 16:30 3540CREATE TABLE AREAS ( RADIUS ... -
flex 3 从页面url中取参数取值的完美解决方案
2008-12-31 22:14 2314flex 3 从页面url中取参数取值的完美解决方案 1:当 ... -
ORACLE 游标的4种应用方法
2008-12-29 17:51 1239--1.普通cursor set serveroutput o ... -
oracle-merge用法详解
2008-12-11 09:04 3166Oracle9i引入了MERGE命令,你能够在一个SQL语句中 ... -
分组取最大
2008-12-10 17:09 1841--按某一字段分组取最大(小)值所在行的数据(2007-10- ... -
SQL语句学习 CASE WHEN THEN ELSE END
2008-12-10 17:06 1959比较2列的值选择最大的一列输出: table a ( ... -
★SqlServer 中 link serve的使用
2008-11-26 09:19 3598问题描述: 日 ... -
★Struts2中的Ajax实现 <s:a>
2008-11-19 09:25 2978项目作完了,现在没什么事情做,继续研究一下Struts2框架. ... -
★给和我一样的新手推荐一个Struts2学习的网站
2008-11-19 09:19 1152给和我一样的新手推荐一个Struts2学习的网站ht ...
相关推荐
在 Struts2 中,`<s:if>` 标签是一种常用的条件判断标签,用于在页面上根据不同的条件展示不同的内容。`<s:if>` 标签依赖于 Struts2 提供的强大表达式语言——OGNL(Object-Graph Navigation Language),该语言可以...
在Struts2框架中,`<s:if>`标签用于条件判断,类似于Java中的if语句。本篇文章将深入解析这段代码所涉及的关键知识点,并通过实际案例帮助理解如何使用Struts2中的`<s:if>`标签进行逻辑控制。 ### Struts2概述 ...
在JSP页面中,我们可以使用Struts2的标签库(例如`s:textfield`, `s:checkbox`, `s:select`等)来创建表单元素,并将这些元素与Action的属性绑定。对于集合类型,我们通常会在JSP中通过迭代器遍历并生成多个表单...
关于STRUTS标签的一些详细说明。 如:<html:form>的说明。
通过上述内容可以看出,在 Struts2 中使用 `<s:bean>` 标签可以灵活地创建各种类型的 bean,并结合 `<s:iterator>` 标签实现高效的数据循环和分页功能。这种做法不仅简化了页面开发工作,还提高了程序的可读性和可...
7. <s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajax B: 1. <s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值 C: 1. <s:checkbox></s:checkbox>---...
* <s:autocompleter>:自动完成 <s:combobox> 标签的内容,这个是 AJAX 实现的 B: * <s:bean>:类似于 Struts1.x 中的 JavaBean 的值 C: * <s:checkbox>:复选框 * <s:checkboxlist>:多选框 * <s:combobox>:...
以上只是Struts2标签库的一部分,实际使用中还有更多标签如`<s:textfield>`(文本输入框)、`<s:textarea>`(文本区域)、`<s:submit>`(提交按钮)等,每个都有其特定的用途,极大地简化了JSP页面的编写。...
- **`<s:iterator>`**:用于遍历集合中的元素,类似于Struts1中的`<logic:iterate>`,但Struts2的实现更为高效,并且支持更复杂的操作,如排序、过滤等。 #### 结论 Struts2标签库相比于Struts1提供了更多的功能和...
这些只是Struts 2 S标签库中的一部分,实际上还有许多其他标签,如`s:textfield`(文本字段)、`s:textarea`(文本区域)、`s:submit`(提交按钮)等等,它们极大地简化了MVC模式中的视图层开发。通过合理使用这些...
6. `<s:autocompleter>`:实现自动完成功能,通常用于输入框的补全。 B部分: 1. `<s:bean>`:类似Struts1.x中的JavaBean标签,用于获取或设置JavaBean的属性。 C部分: 1. `<s:checkbox>`:创建复选框,可以绑定...
在Struts2中,我们可以利用Struts2的AJAX插件实现异步请求。以下是一些使用Struts2实现AJAX的关键点: 1. `struts2-jquery-plugin`:这是一个流行的Struts2 AJAX插件,提供了许多预定义的AJAX行为和标签,如`sj:...
这只是 Struts2 标签库中的一部分,还有许多其他标签,如 `<s:label>`、`<s:radio>`、`<s:select>` 等,它们各自都有特定的用途,帮助开发者更高效地构建动态网页。了解并熟练使用这些标签,可以极大地提升 Struts2 ...
在Struts2中,所有的标签都统一在`<s>`前缀下,通过引入`<%@ taglib prefix="s" uri="/struts-tags" %>`就可以在页面上使用这些标签。 **A组标签:** 1. `<s:a>` - 用于创建超链接,与HTML的`<a>`标签类似,可以...
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) <s:property> (2) <s:set> (3) <s:if> 、<s:elseif>、<s:else> (4) <s:iterator> (5) <s:include> (6) <s:form>、<s:hidden> (7...
在action里面写了方法获取一个list,再将这个list的值放到jsp页面中显示出来,用的是<s:iterator>标签。
10. **AJAX支持标签**:Struts2还提供了一些与AJAX相关的标签,如`<s:a>`(异步链接)、`<s:head>`(引入jQuery库)和`<s:submit>`(异步提交),使得页面更新更加动态和高效。 通过深入理解和熟练运用Struts2 Tags...
3. AJAX标签:Struts2还提供了与AJAX相关的标签,如<s:ajax>,能够实现异步数据交互,增强用户体验。 在使用Struts2标签之前,需要进行以下配置: - 在JSP页面中引入标签库:`<%@ taglib uri="/struts-tags" prefix...
3. AJAX标签:Struts2还提供了一组与AJAX相关的标签,如 `<s:autocompleter>`,用于实现自动补全功能,提升用户体验。 在使用Struts2标签之前,需要在JSP页面引入标签库,并在`web.xml`中配置Struts2过滤器。例如:...