`

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自定义标签

    在这个文件中,你可以定义标签的名称、属性、返回类型等信息。 2. **编写标签处理类(Tag Handler Class)**:这个类继承自Struts2提供的`org.apache.struts2.views.jsp.ui.TagSupport`或`org.apache.struts2.views...

    Struts2自定义分页标签

    3. **配置Struts2**:在struts.xml配置文件中,定义Action和结果类型,确保返回的数据可以被自定义标签使用。 4. **编写自定义标签**:创建JSP标签库,实现分页的展示逻辑。标签需要解析Action返回的PageBean对象,...

    struts2自定义数据类型转换练习

    本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...

    struts2自定义类型转换器

    在默认情况下,Struts2能够自动处理基本类型和简单类型的转换,但当我们需要对复杂的数据类型或者自定义类型的转换时,就需要自定义类型转换器。本文将深入探讨如何在Struts2中实现自定义类型转换器,以便将用户输入...

    struts2自定义拦截器

    虽然“表单上传”在给定的描述中与自定义拦截器直接关联不大,但在Struts2中,我们通常会结合`struts2-convention-plugin` 或者 `struts2-dojo-plugin` 来处理文件上传。`struts.multipart.parser` 属性可以配置...

    Struts 2 自定义MVC 框架

    自定义Struts 2 MVC框架的过程有助于深入理解其工作原理,从而更好地应用和优化项目。 首先,我们来详细探讨Struts 2的核心组件和它们的角色: 1. **模型(Model)**:模型是应用的核心,负责处理业务逻辑和数据。在...

    struts2自定义类型转换、拦截器实例练习

    本实例练习旨在帮助你深入理解Struts2的工作原理,特别是自定义类型转换和拦截器的使用。 首先,让我们详细探讨Struts2的MVC架构。在MVC模式中,Model代表业务逻辑,View负责展示数据,而Controller则是两者之间的...

    Struts2_自定义标签的方法

    - `getDefaultTemplate()`方法:返回模板的名字,Struts2将自动在其后添加`.ftl`扩展名,以查找对应的模板文件。 - `setXXX`方法:设置UIBean的属性,`@StrutsTagAttribute`注解用于描述属性类型和作用,确保正确...

    struts2返回json

    在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离的应用时。JSON是一种轻量级的数据交换格式,它允许服务器向客户端发送结构化的数据,而无需解析...

    struts2 Result类型

    在“Struts2_1500_ResultType”这个压缩包文件中,可能包含了Struts2框架的源代码、相关的示例项目、文档或者自定义Result类型的实现。通过深入研究这些内容,你可以更全面地掌握Struts2 Result类型的使用和扩展方法...

    Struts2 自定类型转换器(三十四)

    - 使用`@ResultType`或`@Result`注解将转换器与Action的返回类型或结果类型关联。 - 在`struts.xml`配置文件中使用`&lt;conversion&gt;`标签注册转换器,指定对应的转换类和需要转换的类型。 5. **测试和调试** 测试...

    在Struts2中使用JasperReports生成报表

    6. **视图渲染**:在Action的execute方法中,生成报表后,将其设置为一个流(stream)属性,并在结果类型中指定如何返回给前端。上面的配置会将报表作为PDF内容发送到浏览器。 7. **前端交互**:在JSP页面中,创建...

    自定义 validate验证 struts1框架

    通过自定义`validate`验证,开发者不仅可以验证基本的数据类型,还可以进行复杂的业务规则验证,如检查唯一性、执行数据库查询等。这种机制增强了Struts1的灵活性,使得开发者可以根据项目需求构建更加健壮的表单...

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

    struts2数据类型转换器

    如果转换失败,Struts2会抛出一个异常,并可以自定义错误消息返回给用户。 Struts2的核心类`ValueStack`维护着一组`ValueHolder`对象,这些对象包含了Action实例以及它们的属性。当请求参数与Action属性匹配时,`...

    struts2 action 返回json方法(一)源码

    Action是Struts2的核心组件,用于处理用户的请求,并返回相应的结果。在现代Web应用中,数据通常以JSON(JavaScript Object Notation)格式在客户端和服务器之间交换,因为JSON具有轻量级、易于解析的特性。本篇将...

    留言板留言板struts2留言板struts2

    Struts2内置了多种结果类型,如dispatcher(重定向或转发到一个JSP页面)、stream(下载文件)等,也可以自定义结果类型。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,...

    Struts2视频教程

    - **类型转换和验证**:Struts2支持自定义类型转换器,可以将用户输入的数据转换为所需的类型;同时还提供了一套强大的验证机制,确保用户输入的数据符合预期格式。 #### 五、Struts2实战经验 - **国际化**:通过...

    Struts2学习教程之自定义类型转换器的方法

    由于Struts2内置的类型转换器仅支持基本类型和一些常见类型,如String和Date,当遇到更复杂的转换需求时,例如将字符串转换为自定义的对象,我们就需要自定义类型转换器。 自定义类型转换器的主要目的是解决Struts2...

    struts2小程序 struts2代码

    2. **配置文件**:Struts2使用XML配置文件(struts.xml或struts.properties)来定义Action、结果类型、拦截器等。这些配置是理解程序工作流程的关键。 3. **Interceptor拦截器**:拦截器允许在Action执行前后插入...

Global site tag (gtag.js) - Google Analytics