论坛首页 Java企业应用论坛

对springside中StrutsAction的疑惑

浏览 2680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-25  
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层操作都可以封装,这也违背了面向对象设计的思想
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics