2019独角兽企业重金招聘Python工程师标准>>>

Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单,并且可以简单的融入到Struts2框架中,当然这只是在我们需要JSON的时候才会显得流光溢彩。

首先不谈Struts2的原生支持,我们自己写一个ajax示例,使用异步请求,直接请求action动作:

InfoAction.java

package cn.codeplus.action; import com.opensymphony.xwork2.ActionSupport; public class InfoAction extends ActionSupport { private static final long serialVersionUID = 1359090410097337654L; public String loadInfo() { return SUCCESS;}}

InfoAction仅仅是简单的返回"success"。

index.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>获取</title> <script type="text/javascript" src="js/jquery.js"> </script> <script type="text/javascript"> function loadInfo() {$("#info").load("loadInfo");
} </script> </head> <body> <input type="button" value="获取" id="btnGet" onclick="loadInfo()" /> <div id="info"></div> </body> </html>

index.jsp包含一个按钮,点击按钮则会触发异步请求事件。

struts.xml

<package name="ajaxDemo" extends="struts-default"> <action name="loadInfo" class="cn.codeplus.action.InfoAction" method="loadInfo"> <result name="success">/info.jsp</result> </action> </package>

可见上面的异步请求的结果将会是加载info.jsp,info.jsp只是一个简单网页,不列出了。

运行效果如下:

单击获取之后:

此时的页面源代码:

<div>标签中嵌套了<title>标签,不符合规范,其实我们只要吧info.jsp写的没有<title>之类的标签,就不会出现这种情况了。

以上说的异步请求仅适用于请求单个文件,如果我们请求的是动态数据,并且数据需要以JSON格式返回,上面的方法将会显得力不从心,这是struts2的原生支持就得出马了。

使用struts2的ajax,必须在项目中引入struts2-json-plugin-2.2.1.jar,在版本2.1.7+都一句绑定在struts2发行包里面了(之前的版本可以在这下载)。记住,要引入struts2-json-plugin-2.2.1.jar。

这次我们使用另一个例子,模拟加载评论:

dto对象,Comment.java

package cn.codeplus.po; public class Comment { private long id; private String nickname; private String content; public long getId() { return id;} public void setId(long id) { this.id = id;} public String getNickname() { return nickname;} public void setNickname(String nickname) { this.nickname = nickname;} public String getContent() { return content;} public void setContent(String content) { this.content = content;}
}

新的InfoAction.java

package cn.codeplus.action; import java.util.ArrayList; import java.util.List; import cn.codeplus.po.Comment; import com.opensymphony.xwork2.ActionSupport; public class InfoAction extends ActionSupport { private static final long serialVersionUID = 1359090410097337654L; private List<Comment> comments = new ArrayList<Comment>(); //没getter and setter方法的属性不会被串行化到JSON  @SuppressWarnings("unused") private String title; //!!!使用transient修饰的属性也会被串行化到JSON  private transient String content; public String loadInfo() {title="123木头人";content="你是木头人,哈哈。";loadComments(); return SUCCESS;} /** * 加载留言信息 */ private void loadComments() {Comment com1 = new Comment();com1.setContent("很不错嘛");com1.setId(1);com1.setNickname("纳尼");Comment com2 = new Comment();com2.setContent("哟西哟西");com2.setId(2);com2.setNickname("小强");comments.add(com1);comments.add(com2);} public List<Comment> getComments() { return comments;} public void setComments(List<Comment> comments) { this.comments = comments;} public static long getSerialversionuid() { return serialVersionUID;} public String getContent() { return content;} public void setContent(String content) { this.content = content;}}

index.jsp还是那个index.jsp。(*^__^*) 嘻嘻……

struts.xml变化挺大:

<package name="ajaxDemo" extends="json-default"> <action name="loadInfo" class="cn.codeplus.action.InfoAction" method="loadInfo"> <result name="success" type="json"></result> </action> </package>

在struts.xml中:

首先,package extends由struts-default转变为json-default,这是必须的,只用在json-default中才包含下面使用的result type为 json。

然后就是result类型需显示指明为json,result标签内,无需指明视图指向的界面。

最后就是运行结果啦:

点击“获取”按钮之后:

可见comments对象和content对象都被串行化到JSON数据了,不知道是不是版本的问题,很多资料都说使用transient修饰的属性不会被串行化到JSON的。

为了使content对象不被串行化到JSON,在不能舍弃其getter setter方法的时候,我们可以这样在content的getter方法上面加上注解:@JSON(serialize=false)

...
@JSON(serialize=false) public String getContent() { return content;
} public void setContent(String content) { this.content = content;
}
...

这时的结果如下:

@JSON和json类型的result都还有很多可选项,无非就是串行化谁,不串行化谁,返回数据的MIME类型,读者可以自行参考相关文档。

获取到JSON数据了,下一步就是在前台使用js处理JSON数据了,小弟js不精,喜欢使用jQuery解析,如有兴趣,且听下回分解jQuery解析JSON数据。

转载于:https://my.oschina.net/KobeGong/blog/113824

Struts2之ajax初析相关推荐

  1. java ajax报错500,(Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决

    (Struts2+JSON+Ajax) XMLHttpRequest ==500怎么解决? 本帖最后由 zjlisok 于 2013-01-29 02:00:05 编辑 XMLHttpRequest. ...

  2. 谁在蚕食你的手机话费-初析WM智能手机木马与利益链

    谁在蚕食你的手机话费 --初析WM智能手机木马与利益链 作者:小金 一.智能手机与高额话费商务精英胡先生终于没能抵挡住身边同事们都在用智能手机的诱惑,也去品牌店购买了一部"多普达S1精英版& ...

  3. struts2 ajax html,Struts2+Jquery+Ajax+Json

    现在使用Json来封装并且传递数据的情形是越来越多了,可怎么样在Struts2中来使用Jquery+Ajax+Json来协同工作呢?在网上查了下就那几个例子被转过来转过去的,还有很多例子根本行不通,这 ...

  4. struts2+jquery+ajax实现上传校验实例

    一直以为ajax不能做上传,直到最近看了一些文章.需要引入AjaxFileUploaderV2.1.zip,下载链接:http://pan.baidu.com/s/1i3L7I2T 代码和相关配置如下 ...

  5. struts2、ajax实现前后端交互

    跳过struts2环境搭建部分,或者可以看我的博客(http://www.cnblogs.com/zhangky/p/8436472.html),里面有写,很详细. 需要导入的jar包(struts官 ...

  6. php 与结合struts2,Struts2和Ajax数据交互示例详解

    前言 我们从Web 2.0的随波逐流,Ajax的大放异彩说起,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创 ...

  7. struts2 jquery ajax 局部刷新遇到的各种问题

    我们的网站一开始都是由前台提交表单到action,每次一个小操作整个页面都会刷新,影响用户体验,这次由我实现部分功能的局部刷新,但是初学ajax遇到不少问题 1.我们在struts.xml外扩展了一个 ...

  8. 【学无止境】ajax长循环,反向ajax初体会,不用ws实现即时聊天

    反向ajax ajax长循环,又叫comet机制,但是我最喜欢的还是叫他反向ajax 反向ajax,顾名思义,就是不是客户端来请求服务器端,而是服务器端请求客户端,这样做的好处是节省了大量以前轮询造成 ...

  9. SpringMVC学习10之AJAX初体验和了解

    Ajax了解 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网 ...

最新文章

  1. 皮一皮:顶尖黑客技术,10秒教学,不会你打我!
  2. OpenCV 图像的混合
  3. CTFshow 信息收集 web13
  4. 1的恢复出厂设置在哪里_无线路由器怎么恢复出厂设置
  5. Apple Catching POJ - 2385(基础的动态规划算法)
  6. 真彩色图像数据量 计算_军职在线大学计算机基础(自主模式)
  7. 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具
  8. Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty 的区别
  9. mysql可视化_Mysql学习
  10. Server Application Error(IIS)
  11. 添加 centos 右键 terminal
  12. Windows自带工具提取颜色得到十六进制颜色码
  13. Intel SGX背景、其他可信计算技术和TEE技术(翻译自Intel SGX Explained)
  14. mysql 怎么解决幻读的问题
  15. 题目:大写年月日改写成阿拉伯数字
  16. 【最小栈c++】设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈
  17. 【54期】Java序列化三连问,是什么?为什么需要?如何实现?
  18. Arduino与Proteus仿真实例-电子相册仿真
  19. 【php-fpm】重启、启动、关闭
  20. 经典工作自我鉴定范文/实习自我鉴定表

热门文章

  1. 01.mac下安装配置maven
  2. 函数名,闭包,装饰器
  3. python中大于0的元素全部转化为1,小于0的元素全部转化为0的代码
  4. CA服务器的简单搭建
  5. HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)
  6. MySQL的主从复制与读写分离技术实例(一)主从复制
  7. 在Java中获取系统属性
  8. 清华大学MBA在职班第一学年第二学期课表
  9. Leetcode 254.因子的组合
  10. 网际协议IP与其配套协议