接上次的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带过来,具体的文件生成逻辑自己添加进来即可。
相关推荐
在这个文件中,你可以定义标签的名称、属性、返回类型等信息。 2. **编写标签处理类(Tag Handler Class)**:这个类继承自Struts2提供的`org.apache.struts2.views.jsp.ui.TagSupport`或`org.apache.struts2.views...
3. **配置Struts2**:在struts.xml配置文件中,定义Action和结果类型,确保返回的数据可以被自定义标签使用。 4. **编写自定义标签**:创建JSP标签库,实现分页的展示逻辑。标签需要解析Action返回的PageBean对象,...
本练习主要关注如何在Struts2中实现自定义的数据类型转换,以满足特定业务需求。 首先,我们需要了解Struts2的数据转换机制。当用户提交表单数据时,Struts2会通过ActionContext获取到这些数据,并尝试将其转换为...
在默认情况下,Struts2能够自动处理基本类型和简单类型的转换,但当我们需要对复杂的数据类型或者自定义类型的转换时,就需要自定义类型转换器。本文将深入探讨如何在Struts2中实现自定义类型转换器,以便将用户输入...
虽然“表单上传”在给定的描述中与自定义拦截器直接关联不大,但在Struts2中,我们通常会结合`struts2-convention-plugin` 或者 `struts2-dojo-plugin` 来处理文件上传。`struts.multipart.parser` 属性可以配置...
自定义Struts 2 MVC框架的过程有助于深入理解其工作原理,从而更好地应用和优化项目。 首先,我们来详细探讨Struts 2的核心组件和它们的角色: 1. **模型(Model)**:模型是应用的核心,负责处理业务逻辑和数据。在...
本实例练习旨在帮助你深入理解Struts2的工作原理,特别是自定义类型转换和拦截器的使用。 首先,让我们详细探讨Struts2的MVC架构。在MVC模式中,Model代表业务逻辑,View负责展示数据,而Controller则是两者之间的...
- `getDefaultTemplate()`方法:返回模板的名字,Struts2将自动在其后添加`.ftl`扩展名,以查找对应的模板文件。 - `setXXX`方法:设置UIBean的属性,`@StrutsTagAttribute`注解用于描述属性类型和作用,确保正确...
在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离的应用时。JSON是一种轻量级的数据交换格式,它允许服务器向客户端发送结构化的数据,而无需解析...
在“Struts2_1500_ResultType”这个压缩包文件中,可能包含了Struts2框架的源代码、相关的示例项目、文档或者自定义Result类型的实现。通过深入研究这些内容,你可以更全面地掌握Struts2 Result类型的使用和扩展方法...
- 使用`@ResultType`或`@Result`注解将转换器与Action的返回类型或结果类型关联。 - 在`struts.xml`配置文件中使用`<conversion>`标签注册转换器,指定对应的转换类和需要转换的类型。 5. **测试和调试** 测试...
6. **视图渲染**:在Action的execute方法中,生成报表后,将其设置为一个流(stream)属性,并在结果类型中指定如何返回给前端。上面的配置会将报表作为PDF内容发送到浏览器。 7. **前端交互**:在JSP页面中,创建...
通过自定义`validate`验证,开发者不仅可以验证基本的数据类型,还可以进行复杂的业务规则验证,如检查唯一性、执行数据库查询等。这种机制增强了Struts1的灵活性,使得开发者可以根据项目需求构建更加健壮的表单...
这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...
如果转换失败,Struts2会抛出一个异常,并可以自定义错误消息返回给用户。 Struts2的核心类`ValueStack`维护着一组`ValueHolder`对象,这些对象包含了Action实例以及它们的属性。当请求参数与Action属性匹配时,`...
Action是Struts2的核心组件,用于处理用户的请求,并返回相应的结果。在现代Web应用中,数据通常以JSON(JavaScript Object Notation)格式在客户端和服务器之间交换,因为JSON具有轻量级、易于解析的特性。本篇将...
Struts2内置了多种结果类型,如dispatcher(重定向或转发到一个JSP页面)、stream(下载文件)等,也可以自定义结果类型。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,...
- **类型转换和验证**:Struts2支持自定义类型转换器,可以将用户输入的数据转换为所需的类型;同时还提供了一套强大的验证机制,确保用户输入的数据符合预期格式。 #### 五、Struts2实战经验 - **国际化**:通过...
由于Struts2内置的类型转换器仅支持基本类型和一些常见类型,如String和Date,当遇到更复杂的转换需求时,例如将字符串转换为自定义的对象,我们就需要自定义类型转换器。 自定义类型转换器的主要目的是解决Struts2...
2. **配置文件**:Struts2使用XML配置文件(struts.xml或struts.properties)来定义Action、结果类型、拦截器等。这些配置是理解程序工作流程的关键。 3. **Interceptor拦截器**:拦截器允许在Action执行前后插入...