前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2中的Ajax请求

Struts2中的Ajax请求

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 15:08:04
1.2K0
发布2019-01-25 15:08:04
举报
文章被收录于专栏:给永远比拿愉快

Struts2中有两种方式处理Ajax请求:

(注:我使用的是最新的Struts 2.3.20)

1. 使用Stream result的方式以流的形式写出到客户端。(这种方式我没有亲自做实验,下面的例子参考的是Struts2的官方文档)

我们可以这样书写我们的Action:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<action name="text-result" class="actions.TextResult">
    <result type="stream">
        <param name="contentType">text/html</param>
        <param name="inputName">inputStream</param>
    </result>
</action>

2. 使用Struts2的插件机制:(下面我以返回JSON格式的数据为例进行说明,需要struts2-json-plugin-2.3.20包,这个包在Struts2的官方下载中已经包含,不需要额外下载)

首先是前台发送Ajax请求:(我这里使用JQuery)

代码语言:javascript
复制
$("#btnClick").click(function() {
    		$.post("hello", {name: "tanzhenyu"},
   				function(data) {
   					alert(data.greeting + ", " + data.name + "!");
   				}, "json");
    	});

我们的Action这样写:

代码语言:javascript
复制
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插件会帮我们转。

我们的配置文件可以这样写:

代码语言:javascript
复制
<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官方文档中关于Ajax的部分。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年01月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档