`
xly_971223
  • 浏览: 1277444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对springside中StrutsAction的疑惑

阅读更多
StrutsAction的action代码如下
/**
 * 简单封装Struts DispatchAction的基类.
 * 提供一些基本的简化函数,将不断增强.
 *
 * @author calvin
 */
public class StrutsAction extends DispatchAction {

	public static final String SUCCESS = "success";
	public static final String DIRECTLY_MESSAGE_KEY = "message";

	static {
		registConverter();
	}

	/**
	 * 设置Struts 中数字<->字符串转换,字符串为空值时,数字默认为null,而不是0.
	 * 也可以在web.xml中设置struts的参数达到相同效果,在这里设置可以防止用户漏设web.xml.
	 */
	public static void registConverter() {
		ConvertUtils.register(new IntegerConverter(null), Integer.class);
		ConvertUtils.register(new FloatConverter(null), Float.class);
		ConvertUtils.register(new DoubleConverter(null), Double.class);
		ConvertUtils.register(new DateConverter("yyyy-MM-dd"), Date.class);
	}

	/**
	 * 将FormBean中的内容通过BeanUtils的copyProperties()绑定到Object中.
	 * 因为BeanUtils中两个参数的顺序很容易搞错,因此封装此函数。
	 */
	protected void bindObject(ActionForm form, Object object) {
		if (form != null) {
			try {
				BeanUtils.copyProperties(object, form);
			} catch (Exception e) {
				ReflectionUtils.handleReflectionException(e);
			}
		}
	}

	/**
	 * 将Object内容通过BeanUtils的copyProperties 复制到FormBean中。
	 * 因为BeanUtils中两个参数的顺序很容易搞错,因此封装此函数。
	 */
	protected void bindForm(ActionForm form, Object object) {
		if (object != null) {
			try {
				BeanUtils.copyProperties(form, object);
			} catch (Exception e) {
				ReflectionUtils.handleReflectionException(e);
			}
		}
	}
	
	public String get(HttpServletRequest request){
		return (String)(request.getSession().getAttribute(""));
	}

	/**
	 * 保存单条信息到Message的简化函数.
	 */
	protected void saveMessage(HttpServletRequest request, String key, String... values) {
		ActionMessages messages = new ActionMessages();
		messages.add(ActionMessages.GLOBAL_MESSAGE,
				new ActionMessage(key, values));
		saveMessages(request.getSession(), messages);
	}

	/**
	 * 直接保存文本信息(非i18n)到messages
	 *
	 * @param message 直接的文本信息
	 */
	protected void saveDirectlyMessage(HttpServletRequest request, String message) {
		ActionMessages messages = new ActionMessages();
		messages.add(ActionMessages.GLOBAL_MESSAGE,
				new ActionMessage(DIRECTLY_MESSAGE_KEY, message));
		saveMessages(request.getSession(), messages);
	}

	/**
	 * 保存单条信息到Error的简化函数.
	 */
	protected void saveError(HttpServletRequest request, String key, String... values) {
		ActionMessages errors = new ActionMessages();
		errors.add(ActionMessages.GLOBAL_MESSAGE,
				new ActionMessage(key, values));
		saveErrors(request.getSession(), errors);
	}

	/**
	 * 直接保存文本信息(非i18n)errors
	 *
	 * @param message 直接的文本信息
	 */
	protected void saveDirectlyError(HttpServletRequest request, String message) {
		ActionMessages errors = new ActionMessages();
		errors.add(ActionMessages.GLOBAL_MESSAGE,
				new ActionMessage(DIRECTLY_MESSAGE_KEY, message));
		saveErrors(request.getSession(), errors);
	}

	/**
	 * 直接输出纯字符串
	 */
	public void renderText(HttpServletResponse response, String text) {
		try {
			response.setContentType("text/plain;charset=UTF-8");
			response.getWriter().write(text);
		} catch (IOException e) {
			log.error(e.getMessage(), e);
		}
	}

	/**
	 * 直接输出纯HTML
	 */
	public void renderHtml(HttpServletResponse response, String text) {
		try {
			response.setContentType("text/html;charset=UTF-8");
			response.getWriter().write(text);
		} catch (IOException e) {
			log.error(e.getMessage(), e);
		}
	}

	/**
	 * 直接输出纯XML
	 */
	public void renderXML(HttpServletResponse response, String text) {
		try {
			response.setContentType("text/xml;charset=UTF-8");
			response.getWriter().write(text);
		} catch (IOException e) {
			log.error(e.getMessage(), e);
		}
	}
}

该类中封装了很多工具方法, 像bindObject() 等 ,我认为应该单独封装成工具类例如StrutsActionUtils,而不应该利用继承方式强加给子类
如果采用这种继承的方式,到最后Action类将变成一个万能的类 几乎所有的web层操作都可以封装,这也违背了面向对象设计的思想
分享到:
评论

相关推荐

    SpringSide4 参考手册

    随后,文档介绍了一系列SpringSide模块,包括Dozer、CXF等,它们都是SpringSide中集成的各种功能模块。 接着,文档详细介绍了如何在SpringSide中使用各种数据访问技术,包括Spring Data JPA、MyBatis以及原生JPA。...

    springside-3.2.2源码

    通过对 Springside 3.2.2 源码的深入学习,开发者可以掌握基于 Spring 的企业级应用开发技术,理解模块化设计、MVC 架构、依赖注入等核心概念,同时也能了解到项目管理和自动化构建的最佳实践。这将有助于提升开发者...

    springside开发全面讲解

    springside是一款基于Spring框架的轻量级开发工具集,它为Java开发提供了简洁、高效的解决方案,尤其适合中大型项目的开发。尽管springside集合了多种复杂的技术,但这并不意味着初学者无法涉足。本资料将由浅入深,...

    Springside-core-4.1.0/Springside-core-4.1.0

    1. **依赖管理**:SpringSide-core-4.1.0对常用的第三方库进行了严格的版本控制,确保了项目的一致性和稳定性。这包括Spring框架、Hibernate ORM、MyBatis等,这些依赖的版本都是经过精心选择和测试的。 2. **构建...

    springside3.3.4 使用方法

    Springside 3.3.4版本作为一个成熟的发布版,不仅集成了Spring框架的核心功能,还提供了对其他开源技术如Hibernate和Struts等的支持。在本文档中,我们将详细介绍如何使用Springside 3.3.4版本,并特别关注SSH...

    springside框架

    《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...

    springside3.3完整版

    本版本,即“springside3.3”,是专为MyEclipse集成环境设计的,包含了完整的功能代码,方便开发者在MyEclipse中进行开发和调试。同时,它还附带了数据.sql文件,意味着我们可以直接导入数据库,快速搭建项目环境。 ...

    springside3.0.zip

    本篇文章将深入探讨SpringSide 3.0中的关键知识点,帮助开发者更好地理解和使用这一强大的工具。 1. **Spring框架基础**:Spring是Java领域最著名的轻量级框架之一,它的核心特性包括依赖注入(DI)和面向切面编程...

    springside

    在SpringSide的压缩包文件中,"springside"可能是一个示例项目的根目录,包含了项目的所有源代码、配置文件和资源。通过分析这个目录,我们可以学习到SpringSide如何组织项目结构,以及如何配置和使用Spring的各个...

    SpringSide3.3.4安装部署

    在 SpringSide3.3.4 安装部署的过程中,我们需要生成 mini-web 项目模板。这个模板将作为我们后续开发的基础。我们可以使用 Maven 的 archetype 机制来生成这个模板。首先,我们需要在命令行中执行以下命令: mvn ...

    有springside4.2.3-GA.jar 包

    本文将围绕springside4.2.3-GA.jar这个核心组件,探讨其在Java应用中的重要作用以及如何利用它提升开发效率。 首先,我们需要理解什么是.jar文件。.jar(Java Archive)是Java平台上的归档文件格式,用于集合多个类...

    springside3与传统ssh区别

    - **Action层:** Springside3中Action层的设计主要依赖于Struts2的Convention插件,该插件能够自动识别和配置Action,使得Action的配置变得更加简洁。 - **示例代码:** ```java @Namespace("/security") public...

    springside-core-4.2.2.GA(含关联的test.jar)

    pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true

    springside-4.0.0.GA.zip

    SpringSide项目始于对Spring Framework的深度理解和实践,它的核心在于简化Spring的使用,让开发者能够更快速、更高效地构建企业级应用程序。4.0.0.GA版本是该项目的一个稳定发布,代表着经过充分测试和验证的成熟...

    springside4(showcase)

    标题"Springside4 (showcase)"暗示了这是一个以展示SpringSide 4核心特性和功能为主的应用实例,而"描述"中的"Springside4"则进一步确认了我们正在探讨的是SpringSide 4框架。标签"springmvc"指出该示例着重于Spring...

    springside.jar

    《springside.jar在Java应用中的使用详解》 在Java开发领域,springside.jar是一个备受推崇的开源项目,它为开发者提供了丰富的工具和最佳实践,以简化Spring框架的使用。本文将深入探讨springside.jar的核心功能,...

    springside3文档资料收录

    Spring对各种ORM框架如Hibernate、JPA有很好的支持,SpringSide3会讲解如何利用Spring Data Access层,进行数据库操作,包括事务管理、JdbcTemplate、HibernateTemplate的使用方法。 六、Spring测试 测试是保证代码...

    springside4-master

    在JavaEE领域,SpringSide4-Master涵盖了诸如Hibernate、Struts、JSF等其他主流框架的替代方案,展示了Spring的全面性和兼容性。它还涉及了RESTful API设计、JSON序列化、模板引擎以及前后端分离等现代Web开发技术,...

    springside示例quickstart的eclipse工程

    在本文中,我们将深入探讨SpringSide示例Quickstart的Eclipse工程,了解其结构和主要组件,以便更好地利用这个项目进行学习和开发。 首先,"quickstart"是SpringSide项目提供的快速启动模板,它是专门为初学者和有...

    springside-案例

    【描述】"springside 案例 转换为myeclipse"指的是将SpringSide项目导入到MyEclipse集成开发环境中进行进一步的开发和调试。MyEclipse是一款功能强大的Java EE集成开发工具,支持多种框架和项目类型,包括Spring。将...

Global site tag (gtag.js) - Google Analytics