struts2ajax配置文件|关于struts2使用jquery发送ajax请求返回json字符串的问题

❶ 急!~~struts2 验证文件。与JQUERY ajax 高手进啊。

首先你要理解Ajax的原理,通俗的说是:Ajax—-请求—>服务器—响应—->Ajax回调意思是如果你用ajax发送请求,最后不管怎么样,响应结果都会回到这个ajax,这是异步操作。所以通常Ajax的配置根本不配返回路径,即使配了<return>ajax也不认识<action="ajaxAction" class="xx" method="xx"></action>而struts2的验证框架通常适合于提交表单,这样它就可以<action="formAction" class="xx" method="xx"> <return name="success">xxx.jsp</result> <return name="input">xxx.jsp</result></action>那么总结下:如果使用Ajax提交,它会进入xml里面进行校验,而且会返回input,但是返回的input数据到Ajax的回调函数里面了,而且返回的是一个页面,你可以通过data.responseText获得,但是获得也没什么意义。解决方法两种:①Ajax提交的话不使用struts2的XML校验,改用直接在Action method中校验,如果为空使用response.getWriter().print()打印错误消息,然后Ajax回调函数进行相关处理②不使用Ajax提交,使用表单submit提交,使用struts2的XML校验,这样绝对能在<s:fielderror/>中输出错误消息

❷ 用最原始的ajax向struts2的action发送请求,并且传递参数,action想ajax页面回传数据,怎么写啊

response.getWriter().write("****"); 页面上xmlHttp.responseText 即是action传回的参数,配置文件不需要新的配置

❸ struts2用ajax怎么配置action

首先,大家都知道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…@Overridepublic 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

Struts2中有两种方式处理Ajax请求:(注:我使用的是最新的Struts2.3.20)1.使用Streamresult的方式以流的形式写出到客户端。(这种方式我没有亲自做实验,下面的例子参考Struts2的官方文档)这样书写我们的Action:packageactions;importjava.io.InputStream;importjava.io.StringBufferInputStream;importcom.opensymphony.xwork2.ActionSupport;publicclassTextResultextendsActionSupport{privateInputStreaminputStream;publicInputStreamgetInputStream(){returninputStream;}publicStringexecute()throwsException{inputStream=newByteArrayInputStream("HelloWorld!ThisisatextstringresponsefromaStruts2Action.".getBytes("UTF-8"));returnSUCCESS;}}这样配置我们的struts.xml:<actionname="text-result"class="actions.TextResult"><resulttype="stream">们可以这样书写我们的Action:packageactions;importjava.io.InputStream;importjava.io.StringBufferInputStream;importcom.opensymphony.xwork2.ActionSupport;publicclassTextResultextendsActionSupport{privateInputStreaminputStream;publicInputStreamgetInputStream(){returninputStream;}publicStringexecute()throwsException{inputStream=newByteArrayInputStream("HelloWorld!ThisisatextstringresponsefromaStruts2Action.".getBytes("UTF-8"));returnSUCCESS;}}这样配置我们的struts.xml:<actionname="text-result"class="actions.TextResult"><resulttype="stream">.使用Struts2的插件机制:(下面我以返回JSON格式的数据为例进行说明,需要struts2-json-plugin-2.3.20包,这个包在Struts2的官方下载中已经包含,不需要额外下载)首先是前台发送Ajax请求:(我这里使用JQuery)$("#btnClick").click(function(){$.post("hello",{name:"tanzhenyu"},function(data){alert(data.greeting+","+data.name+"!");},"json");});我们的Action这样写:publicHelloActionextendsActionSupport{privateStringname;//这里的nam用来接收Ajax的请求数据privateMap<String,String>resultMap;//这里的Map用来返回结果JSON数据publicgetName(){returnname;}publicsetName(Stringname){this.name=name;}publicgetResultMap(){returnresultMap;}publicsetResultMap(Map<String,String>resultMap){this.resultMap=resultMap;}publicStringexecute(){resultMap=newMap<>();resultMap.put("greeting","Hello");resultMap.put("name",name);returnAction.SUCCESS;}}这里注意的是:我们的Map对象不需要手动转成JSON对象,Struts2的JSON插件会帮我们转。我们的配置文件可以这样写:<packagename="default"namespace="/"extends="json-default"><actionname="hello"class="cn.tzy..hello.action.HelloAction"><resulttype="json"><paramname="root">resultMap</param></result></action></package>这里注意的是:extends必须是“json-default”,name为root的param是说明返回时被序列化的对象,值为一个OGNL表达式。OK,成功搞定,如果有疑问可以参考Struts2官

❺ struts2 使用ajax 遇到问题: struts2 的 result 有跳转页面,那就会和 ajax的无刷新相违背,如何解决

Action方法里面return null,但是需要将你的数据以流的方式返回到页面,这就需要用到Jqurey ajax里面的返回结果,如json、text、xml等,如果是text那么直接将数据加入到输入流,如果是json则需要将数据封装成json在加入到输入流,代码如下HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(“你要返回的数据类型如:json,text等”+ ";charset=UTF-8"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.getWriter().write(返回的数据字符串); response.getWriter().flush();

❻ 关于struts2,使用jquery发送ajax请求,返回json字符串的问题

aysnc:false, 下面加一句 dataType:"json", 试一下。抄你的配置文件没错,其实不用这么麻烦,JSONArray array = JSONArray.fromObject(smallTypes); System.out.println(array.toString()); this.result = array.toString();这三句代码不需要。在action中,只要有get和set方法,值都能传到前台。

❼ struts2 ajax jquery中必须要配struts.xml中param参数

这个也不一定非要配置的,如果配置了,tip这个名字就是你需要返回数据,如果不配置的话,那么他就会把你操作的那个action里面所有有get方法的数据都返回,建议你配置了,这样就不需要把所有的数据返回来,只需返回你所需要数据,减轻程序负担!


赞 (0)