`

Struts2的自定义返回类型

 
阅读更多

       接上次的Struts自定义标签,这次说一下Struts的自定义返回类型,我们在实际的应用中,Struts原生的返回类型是不够用的,比如json或者file类型,需要自己写io流处理,过程大致相同且相对繁琐,如果可以自己封装一下,使用起来事半功倍。

       实现过程也不复杂,首先配置strtus.xml

<package name="feng" extends="struts-default">
	<result-types>
		<result-type name="ajax" class="com.struts.extend.result.AJAXResult">
		</result-type>
		<result-type name="excel" class="com.struts.extend.result.ExcelResult">
		</result-type>
		<result-type name="file" class="com.struts.extend.result.FileResult">
		</result-type>
	</result-types>
        <action name="testAction" class="testAction">
		<result name="success">/feng/test.jsp</result>
		<result name="export" type="excel"></result>
	</action>
</package>

        不同的type类型对应不同的class(需要继承com.opensymphony.xwork2.Result),类定义代码如下:

package com.struts.extend.result;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;

/**
 * @author songfeng
 * @version 1.0
 * @since 2015-9-18
 */
public class AJAXResult implements Result
{

	private String ajax;
	private HttpServletResponse rep;
	private String chartSet = "UTF-8";
	private static final long serialVersionUID = 3841999252996023829L;

	public void execute(ActionInvocation invocation) throws Exception
	{
		this.ajax = ((String) invocation.getStack().findValue("ajax"));
		if (this.ajax == null)
		{
			throw new NullPointerException("没有定义ajax字符串结果集合,或者没有提供get方法");
		}
		this.rep = ServletActionContext.getResponse();
		this.rep.reset();
		this.rep.setContentType("text/html; charset=" + this.chartSet);
		ServletOutputStream os = this.rep.getOutputStream();
		os.write(this.ajax.getBytes(this.chartSet));
		os.flush();
		os.close();
	}

	public String getChartSet()
	{
		return this.chartSet;
	}

	public void setChartSet(String chartSet)
	{
		this.chartSet = chartSet;
	}
}

        对应的Action代码中增加ajax字段的get,set方法,其他就是具体的流操作,file类型和excel类型的代码不赘述,需要的参数通过Action带过来,具体的文件生成逻辑自己添加进来即可。

0
0
分享到:
评论

相关推荐

    struts2分页代码的示例

    下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...

    Struts2入门教程(全新完整版)

    2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 32 4.使用默认的execAndWait...

    Struts2实现分页代码

    下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...

    struts2 标签库 帮助文档

    Struts 2 标签库(文档手册) Tags-API-CLSW-JSP &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-...

    Struts2+API+标签全解+网页说明

    iteratot标签:对集合属性迭代(属性类型:List、Map、数组)。 append标签:将多个集合对象拼接在一起,组成一个新的集合。将多个集合使用一个标签完成迭代。 generatot标签:将指定的字符串按照规定的分隔符分解...

    react-qrcode-logo:React + Typescript组件生成带有自定义颜色和徽标的QR码

    react-qrcode-徽标 Typescript React组件以生成可定制的QR代码。 安装 npm install --save react-qrcode-logo ... 二维码解码后,将返回该值 ecLevel L | M | Q | H M QR码的纠错级别 enableCORS b

    Spring面试题

    Spring 框架的 IOC 容器采用类型 2 和类型3 实现。 面向方面的编程 面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    java面试题

    同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件是一种特殊的委托。 应用程序域? 答:应用程序域可以理解为一种轻量级的...

    北京中科信软AJAX培训

    文档类型定义及声明 XML名域 操纵和解析XML 选择合适的XML生成方式 XHTML与CSS XHTML、CSS与Ajax XHTML与CSS基础 XHTML语法约束 JavaScript JavaScript与Ajax JavaScript基本数据结构 JavaScript表达式和运算符 ...

    freemarker总结

    返回hash里的所有value, 返回结果类型sequence 模板 使用FTL(freeMarker模板语言)编写 组成部分 一、整体结构 1、注释:注释内容--&gt;,不会输出。 2、文本:直接输出。 3、interpolation:由 ${var} 或 #{...

    Spring API

    11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction...

    Spring中文帮助文档

    11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Spring-Reference_zh_CN(Spring中文参考手册)

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.1.1. DelegatingRequestProcessor 15.4.1.2. DelegatingActionProxy 15.4.2. ActionSupport 类 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.5.1.1. 将 ...

    iBATIS实战

    13.2.3 主要按返回类型来组织映射文件 239 13.3 命名规范 239 13.3.1 语句的命名 239 13.3.2 参数映射的命名 239 13.3.3 结果映射的命名 240 13.3.4 XML文件的命名 240 13.4 Bean、map还是XML 240 13.4.1 JavaBean ...

    react-scroll-to-top:轻巧的按钮组件,可滚动到页面顶部

    轻巧且可自定义的按钮组件,当按下时滚动到页面顶部仅在页面上达到特定高度后,该按钮才可见 现场演示 安装 运行npm i react-scroll-to-top 用法 导入然后在渲染/返回函数中的任何位置包含&lt;ScrollToTop&gt; : import ...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

Global site tag (gtag.js) - Google Analytics