BeanSoft's Java Blog
免费电子书/视频《MyEclipse 6 Java 开发中文教程》作者刘长炯官方博客

代码如下, 那个DAO可能找不到, 没关系, 删掉就OK了.

import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import scm.dao.BaseDAO;
import scm.entity.User;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 封装一些基本的Action功能.
 * @author BeanSoft
 *
 */
public abstract class BaseActionSupport extends ActionSupport {
    
    private String message;// 返回的消息
    private String title;// 页面显示标题
    private BaseDAO baseDAO = new BaseDAO();// 基础的DAO对象
    
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    
    public BaseDAO getBaseDAO() {
        return baseDAO;
    }

    public void setBaseDAO(BaseDAO baseDAO) {
        this.baseDAO = baseDAO;
    }
    
    /**
     * 将所有URL参数合并成一个URL字符串(page参数除外), 提供分页时显示.
     * @return 字符串, 如: para1=11&para2=bb
     */
    public String mergeParamsAsURI() {
        Map<String, String[]> params = getRequest().getParameterMap();
        
        StringBuffer out = new StringBuffer();
        
        Set<String> keys = params.keySet();// 列出所有表单参数
        
        for (String key : keys) {
            if(!"page".equals(key)) {
                // TODO 发现Map值有乱码 --> Tomcat
                String[] values = params.get(key);// 尝试获取多个参数
                
                // 不管单个参数还是多个参数统一转成了数组
                if(values.length > 1) {
                    values = getRequest().getParameterValues(key);
                } else {
                    values = new String[] {getParameter(key)};
                }
                
                System.out.println("key=" + key);
                
                try {
                    for(String value : values) {
                        System.out.println("value=" + value);
                        
                        out.append(java.net.URLEncoder.encode(key, "UTF-8") + "=");
                        out.append(java.net.URLEncoder.encode(value, "UTF-8") + "&");
                        // key=value&
                    }

                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        
        // 删除末尾多余的 & 字符
        if(out.toString().endsWith("&")) {
            out.deleteCharAt(out.length() - 1);
        }
        
        return out.toString();
    }

    /**
     * 重置和页面显示有关的参数, title和message属性都设置为空.
     * Struts 2 不需要这个方法, 每个Action都是新的对象. 
     */
    void resetMessages() {
        setMessage("");
        setTitle("");
    }
    
    /**
     * 获取当前会话的登录用户信息
     * @return User
     */
    public User getSessionLoginedUser() {
        User currentUser = (User) getSession("loginedUser");
        return currentUser;
    }
    
    /**
     * 读取表单参数
     * @param name
     * @return
     */
    public String getParameter(String name) {
        return ServletActionContext.getRequest().getParameter(name);
    }
    
    /**
     * 将表单参数作为整数返回.
     * @param name 表单参数名
     * @return
     */
    public int getParameterInt(String name) {
        String s = getParameter(name);
        
        if(s == null) {
            return 0;
        } else {
            try {
                return Integer.parseInt(s);
            } catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        return 0;
    }
    
    /**
     * 将表单参数作为长整数返回.
     * @param name 表单参数名
     * @return
     */
    public long getParameterLong(String name) {
        String s = getParameter(name);
        
        if(s == null) {
            return 0L;
        } else {
            try {
                return Long.parseLong(s);
            } catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        return 0L;
    }    
    
    /**
     * 设置 request 的属性.
     * @param name 属性名
     * @param value 属性值
     */
    public void setAttribute(String name, Object value) {
        ServletActionContext.getRequest().setAttribute(name, value);
    }
    
    /**
     * 获取 request 的属性.
     * @param name 属性名
     */
    public Object getAttribute(String name) {
        return ServletActionContext.getRequest().getAttribute(name);
    }    
    
    /**
     * 读取 session 中的属性值
     * @param name
     * @return
     */
    public static Object getSession(String name) {
        ActionContext ctx = ActionContext.getContext();
        Map session = ctx.getSession();

        return session.get(name);
    }
    
    /**
     * 向 session 设置属性值
     * @param name
     * @param value
     */
    public static void setSession(Object name, Object value) {
        ActionContext ctx = ActionContext.getContext();
        Map session = ctx.getSession();
        session.put(name, value);
    }
    
    /**
     * 获取 application 对象.
     * @return
     */
    public static ServletContext getApplication() {
        return ServletActionContext.getServletContext();
    }
    
    /**
     * 获取请求对象.
     * @return
     */
    public static HttpServletRequest getRequest() {
        return ServletActionContext.getRequest();
    }
    

}
posted on 2008-11-27 18:09 BeanSoft 阅读(1756) 评论(5)  编辑  收藏 所属分类: Web Framework
Comments
  • # re: 贴一个Struts2项目中使用的通用Action基类:BaseActionSupport
    漠漠
    Posted @ 2008-11-28 09:27
    嗯 不错不错
    但是。。。 action直接调用dao不太好吧  回复  更多评论   
  • # re: 贴一个Struts2项目中使用的通用Action基类:BaseActionSupport
    BeanSoft
    Posted @ 2008-11-28 09:31
    那在Struts 2中调用getParameter()似乎也不太好吧, 怎么说呢, 代码实用就行, 敢问有几个项目是整天切换DAO和数据库的.  回复  更多评论   
  • # re: 贴一个Struts2项目中使用的通用Action基类:BaseActionSupport
    javaja
    Posted @ 2008-11-28 20:42
    一个字,乱。  回复  更多评论   
  • # re: 贴一个Struts2项目中使用的通用Action基类:BaseActionSupport
    学生
    Posted @ 2008-11-28 21:42
    正在学Struts 2, 正有疑问怎么获取参数和session呢, 谢谢了! 写的挺好的.  回复  更多评论   
  • # re: 贴一个Struts2项目中使用的通用Action基类:BaseActionSupport
    残梦追月
    Posted @ 2008-12-04 19:26
    @学生
    汗,作者不是写出来了么?
    ActionContext ctx = ActionContext.getContext();
    Map session = ctx.getSession();

      回复  更多评论   

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
 

推荐图书:
走出软件作坊》、《悟透JavaScript》、《Head First 设计模式
相关链接:
网站导航: