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层操作都可以封装,这也违背了面向对象设计的思想