如何在struts2中使用ajax
意思就是在jsp页面添加这句:<s:headtheme="ajax">可是我每次访问这个页面的时候都会报出一大堆错误我就猜测是不是需要导入一些ajax的jar包了?还有使...
意思就是在jsp页面添加这句:<s:head theme="ajax">可是我每次访问这个页面的时候都会报出一大堆错误我就猜测是不是需要导入一些ajax的jar包了?还有使用struts2自带的一些DOJO,但是做不出文档中提供的那些效果出来是跟浏览器有关系还是怎么了?
展开
4个回答
推荐于2016-08-19 · 知道合伙人互联网行家
关注
展开全部
Struts2中有两种方式处理Ajax请求:
(注:我使用的是最新的Struts 2.3.20)
1. 使用Stream result的方式以流的形式写出到客户端。(这种方式我没有亲自做实验,下面的例子参考Struts2的官方文档)
这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport { private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS; }}
这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="stream">
们可以这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport { private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS; }}
这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="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这样写:
public HelloAction extends ActionSupport { private String name;//这里的nam用来接收Ajax的请求数据 private Map<String, String> resultMap;//这里的Map用来返回结果JSON数据 public getName() { return name; } public setName(String name) { this.name = name; } public getResultMap() { return resultMap; } public setResultMap(Map<String, String> resultMap) { this.resultMap = resultMap; } public String execute() { resultMap = new Map<>(); resultMap.put("greeting", "Hello"); resultMap.put("name", name); return Action.SUCCESS; }}
这里注意的是:我们的Map对象不需要手动转成JSON对象,Struts2的JSON插件会帮我们转。
我们的配置文件可以这样写:
<package name="default" namespace="/" extends="json-default"> <action name="hello" class="cn.tzy..hello.action.HelloAction"> <result type="json"> <param name="root">resultMap</param> </result> </action></package>
这里注意的是:extends必须是“json-default”,name为root的param是说明返回时被序列化的对象,值为一个OGNL表达式。
OK,成功搞定,如果有疑问可以参考Struts2官
(注:我使用的是最新的Struts 2.3.20)
1. 使用Stream result的方式以流的形式写出到客户端。(这种方式我没有亲自做实验,下面的例子参考Struts2的官方文档)
这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport { private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS; }}
这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="stream">
们可以这样书写我们的Action:
package actions; import java.io.InputStream;import java.io.StringBufferInputStream;import com.opensymphony.xwork2.ActionSupport; public class TextResult extends ActionSupport { private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { inputStream = new ByteArrayInputStream("Hello World! This is a text string response from a Struts 2 Action.".getBytes("UTF-8")); return SUCCESS; }}
这样配置我们的struts.xml:<action name="text-result" class="actions.TextResult"> <result type="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这样写:
public HelloAction extends ActionSupport { private String name;//这里的nam用来接收Ajax的请求数据 private Map<String, String> resultMap;//这里的Map用来返回结果JSON数据 public getName() { return name; } public setName(String name) { this.name = name; } public getResultMap() { return resultMap; } public setResultMap(Map<String, String> resultMap) { this.resultMap = resultMap; } public String execute() { resultMap = new Map<>(); resultMap.put("greeting", "Hello"); resultMap.put("name", name); return Action.SUCCESS; }}
这里注意的是:我们的Map对象不需要手动转成JSON对象,Struts2的JSON插件会帮我们转。
我们的配置文件可以这样写:
<package name="default" namespace="/" extends="json-default"> <action name="hello" class="cn.tzy..hello.action.HelloAction"> <result type="json"> <param name="root">resultMap</param> </result> </action></package>
这里注意的是:extends必须是“json-default”,name为root的param是说明返回时被序列化的对象,值为一个OGNL表达式。
OK,成功搞定,如果有疑问可以参考Struts2官
2013-09-08
展开全部
一般都是在jsp和servlet的交互中间加一个js,然后在js中写ajax
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-08
展开全部
用jquery ,json 就可以很简单 去网上找下教程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-08
展开全部
jquery
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询