前面写过原生js实现ajax的博客,但是用起来不是太方便,jquery对原生的js进行了很好的封装,使用起来也更简单;但是在项目中使用了struts2,处理ajax却又不同,花了几天时间研究,终于解决了这个问题。

首先,大家都知道struts2中有处理表单提交的方法,表单元素中的name对应着action中的成员变量,当你提交的时候,会把输入组中的数据映射到action的成员变量中,这里我纠结了好久,因为不知道是ajax异步提交的还是框架为我们提交的。所以在表单输入组中,如果是用ajax异步提交,就不用写name属性。

其实在struts2中,有对ajax的支持,通过ajax提交的data(可以是json类型)也可以映射成action中的成员变量,只需要调用action中的getter方法就能获取到相应的值,但是需要额外导入相应的jar包:

commons-lang-2.4.jar;

json-lib-2.3-jdk13.jar;

jsonplugin-0[1].32.jar;

ezmorph-1.0.2.jar;

commons-beanutils-1.7.0.jar;

这些jar包在官网中提供的strut2的文件中的lib目录下都可以找到,为了版本统一,尽量在官网提供的文件中去找这些jar包。

这是前台的form:(这里的form中的action中不用写,<input type="submit">,这些可能会导致页面刷新,就没有达到异步的效果了。)

 <form>
<input type="hidden" id="articleID" value=<s:property value="targetArticle.articleID"/>>
<input type="text" placeholder="昵称" id="userName" class="form-control"/>
<textarea rows="6" id="commentContent" class="form-control" cols="18"></textarea>
<input type="button" class="form-control" value="提交评论" id="commentSubmit">
</form>

这是使用jquery进行异步提交,避免出现路径错误,在url中使用了EL表达式,因为这段jquery是在jsp页面时内嵌的,所以能够使用EL表达式。(后来实践证明,在外联的js中使用这个EL表单式也没有报错,也能正确使用)

success : function(data){...}中的data就是从服务端返回的数据,这个数据可以作为action中的一个成员变量,在action中可以通过setter方法进行赋值,

然后再struts.xml中进行参数配置,<param name="root">result</param>就可以在前台返回服务端赋值的数据了,这里的result不仅是一个单独的字符串,甚至可以是Java中的list,在前台也可以用jquery对list解析遍历。

//异步提交表单
$('#commentSubmit').click(function() {
var userName = $('#userName').val();
var commentContent = $('#commentContent').val();
var articleID = $('#articleID').val();
//alert(articleID);
if (userName == "" || commentContent == ""||articleID=="") {
alert("昵称和内容都不能为空");
return false;
} $.ajax({
type : "post",
url : "${pageContext.request.contextPath}/addComment",
data : {
userName : userName,
commentContent : commentContent,
articleID : articleID
},
dataType:"json", success : function(data) {
alert(data);
$('#commentContent').val("");
$('#userName').val("");
location.reload();
}, error : function() {
alert("评论失败");
}
});
});

然后再是action,省略部分代码。可以看出action中的成员变量名称都和ajax中的data:{...}名称相一致

public class AddComment extends ActionSupport {

    private static final long serialVersionUID = 1L;
private String userName;
private String commentContent;
private String articleID;
private String result; getter and setter... @Override
public String execute() throws Exception { HttpServletRequest request=ServletActionContext.getRequest();
CommentDAO commentDAO=new CommentDAO();
commentDAO.addComments(this.userName, this.commentContent, this.articleID);
this.setResult("评论成功");return "success";
} }

最后再来说一下struts.xml,这个和之前的不一样,之前使用struts.xml,package中的extends后面是:struts-default,使用ajax之后就是:json-default

两者区别:http://www.cnblogs.com/lbangel/archive/2013/05/24/3096986.html

<param name="root">result</param> 上文提过,这个参数就是前台中返回的数据。
<package name="filter"  extends="json-default">     
     <action name="addComment" class="blog.controller.action.AddComment">
<result name="success" type="json">
<param name="root">result</param>
</result>
</action>

struts2中ajax的使用的更多相关文章

  1. struts2中Ajax校验

    Ajax(Asynchronous JavaScript and Xml),整合了JavaScript,XML,CSS,DOM,Ajax引擎(XMLHttpRequest). JavaScript语言 ...

  2. Struts2与ajax整合之缺点

    之前有篇博客介绍了Struts2与ajax的整合,链接Struts2之-集成Json插件实现Ajax 这里不再累述,看以上博客. 此篇博客想吐槽一下Struts2的缺点--错误处理做的不好,怎么做的不 ...

  3. struts2中各个jar包作用

    Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...

  4. struts2中的jar包

    核心包: (后面数字是版本号,不同struts2版本,数字可能不一样.) struts2-core-2.1.8.1 struts2的核心jar包,不可缺少的 xwork-core-2.1.6 xwor ...

  5. Struts2与Ajax的整合

    整合: 导入jar包 sturts2-json-plugin-2.1.8.1.jar 说明: 在该jar包中有struts-plugin.xml文件 <struts>            ...

  6. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  7. struts2中如何使用主题theme

    一.什么是主题? 主题就是一种风格化标签,能够让所有UI标签能够产生同样的视觉效果而归集到一起的一组模板,即风格相近的模板被打包为一个主题 二.struts2提供的主题有哪些呢?struts2中如何修 ...

  8. jquery中ajax 从前端到后端 完整过程解析

    几个原则: 1.get方式访问浏览器时,常加参数缘由: GET访问浏览器是等幂的,就是一个相同的URL只有一个结果[相同是指整个URL字符串完全匹配],所以第二次访问的时候如果 URL字符串没变化,浏 ...

  9. Struts2 中result type属性说明

    Struts2 中result type属性说明 首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-t ...

随机推荐

  1. hexo博客更新主题后上传Git操作

    克隆主题: git clone https://github.com/SuperKieran/TKL.git _config.yml文件中主题改为新增主题 # Extensions ## Plugin ...

  2. Navicat安装及简单使用

    一.安装 下载完之后,直接解压出来就能用,看一下解压之后的目录: 双击打开下面这个文件(可以把它添加一个桌面快捷方式,或者添加到任务栏): 然后会提示你输入注册码: 回到navicat的解压出来的文件 ...

  3. 七牛云java(服务端)通用工具类

    前言 需要安装lombok插件. 功能列表 上传本地文件 上传Base64图片 获取文件访问地址 上传MultipartFile 代码 pom.xml <dependency> <g ...

  4. Linux 下修改网卡接口名

    Linux下修改网卡接口名 by:授客 QQ:1033553122 (测试环境:CentOS-6.0-x86_64-bin-DVD1.iso+Vmware) 作用 可以用于解决类似如下Device n ...

  5. PullToRefreshGridView上拉刷新,下拉加载

    PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...

  6. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  7. Source Insight里头文件注释和函数头的注释

    1.将下述代码拷贝入一个文件,扩展名为em 2.打开BASE工程,添加本文件,并重新同步 3.添加hh_InsertFuncHeader的快捷键,即为函数头注释,光标需要放在函数名那一行,否则无效 4 ...

  8. C++ 获取当前正在执行的函数的相关信息

    (我的运行环境:win10x64+vs2015通过, 有的环境KUbuntu 8.04.1 x64 g++ 4.2.3也通过了)主要通过宏来实现:(注意,开头和结尾都是两个下划线) 1. __PRET ...

  9. 深度理解select、poll和epoll

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序.在大数据.高并发.集群等一些名词唱得火热之年代,select和poll的 ...

  10. 【PAT】B1085 PAT单位排行(25 分)(c++实现)

    终于做的有点眉目了,今天学习了一点stl的皮毛,解题瞬间变容易了 下边开始分析本题 这道题如果用纯c解决实在太麻烦,试了半天两个超时,果断放弃,还是用map方便: 我的方法与柳神的方法是有区别的,我只 ...