`
mikey.tsu
  • 浏览: 133827 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

BaseAction 和继承类的应用

阅读更多
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.displaytag.tags.TableTagParameters;
import org.displaytag.util.ParamEncoder;

import com.autocreate.service.BaseService;
import com.autocreate.util.JBeanClass;
import com.autocreate.util.Log;
import com.opensymphony.xwork2.ActionSupport;

/**
 * BaseAction
 * @author Administrator
 */
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, SessionAware
{
	private static final long serialVersionUID = -2252914695328460450L;

	/**
	 * 添加失败
	 */
	public static final String ADDFAILED = "addfailed";

	/**
	 * 添加成功
	 */
	public static final String ADDSUCCESS = "addsuccess";

	/**
	 * 每页列表,即每页显示的记录数
	 */
	@SuppressWarnings("unchecked")
	private List list;

	/**
	 * 当前页码,即当前第几页
	 */
	private int pageNumber = 1;

	/**
	 * 每页记录数,即一页显示多少条
	 */
	private int pageSize = 20;

	/**
	 * 总记录数
	 */
	private int fullListSize = 0;

	/**
	 * 页面传递删除的记录集合
	 */
	private String[] serial;

	/**
	 * 响应URL
	 */
	private String url;

	/**
	 * 响应内容
	 */
	private String msg;

	/**
	 * HttpSession
	 */
	@SuppressWarnings("unchecked")
	public Map session;

	/**
	 * HttpServletRequest
	 */
	public HttpServletRequest request;

	/**
	 * HttpServletResponse
	 */
	public HttpServletResponse response;

	/**
	 * 跳转到添加页面
	 * @return
	 */
	public String add()
	{
		return SUCCESS;
	}

	/**
	 * 查询
	 * @return
	 */
	public abstract String find();

	/**
	 * 查询集合
	 * @return
	 */
	public abstract String list();

	/**
	 * 添加
	 * @return
	 */
	public abstract String insert() throws Exception;

	/**
	 * 修改
	 * @return
	 */
	public abstract String modify() throws Exception;

	/**
	 * 删除
	 * @return
	 */
	public abstract String delete() throws Exception;

	/**
	 * 根据对象和页面删传递过来的删除数组,反射删除数据库
	 * @param serial
	 * @param entityClass
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	protected boolean deleteByStrings(Class entityClass) throws Exception
	{
		if (null != serial && serial.length > 0)
		{
			BaseService baseService = new BaseService();
			Object obj = entityClass.newInstance(); // 创建实例
			Method method = entityClass.getMethod("getTablePrimaryKey"); // 执行指定方法
			String primaryKey = method.invoke(obj).toString();
			for (String str : serial)
			{
				obj = JBeanClass.setPropertyValueFromString(obj, primaryKey, str);
				baseService.delete(obj);
			}
		}
		return false;
	}

	/**
	 * 查询一页数据
	 * @param clazz
	 * @param tableName
	 * @param map
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	protected void queryPageList(String tableName, Class serviceClass, Class entityClass, Map<String, String> map)
	{
		try
		{
			String pageIndexName = new ParamEncoder("element").encodeParameterName(TableTagParameters.PARAMETER_PAGE); // 页数的参数名
			String value = request.getParameter(pageIndexName);
			pageNumber = StringUtils.isEmpty(value) ? 1 : Integer.parseInt(value); // 当前页数

			Class classType = serviceClass;
			Object obj = serviceClass.newInstance(); // 创建实例

			Method method = classType.getMethod("getCount", new Class[] { String.class, Map.class }); // 执行指定方法
			fullListSize = Integer.parseInt(method.invoke(obj, new Object[] { tableName, map }).toString());

			Method method2 = classType.getMethod("queryPageList", new Class[] { String.class, Class.class, Map.class, int.class, int.class }); // 执行指定方法
			list = (List) method2.invoke(obj, new Object[] { tableName, entityClass, map, pageNumber, pageSize });
		}
		catch (Exception e)
		{
			Log.getLogger().error("queryPageList error...", e);
		}
	}

	/**
	 * 输入HTML响应内容用于AJAX
	 * @param value 要写的值
	 */
	public void writerHtml(String value)
	{
		writer(value, 1);
	}

	/**
	 * 输入XML响应内容用于AJAX
	 * @param value 要写的值
	 */
	public void writerXml(String value)
	{
		writer(value, 2);
	}

	/**
	 * 输入响应内容用于AJAX
	 * @param value
	 * @param type
	 */
	private void writer(String value, int type)
	{
		PrintWriter out = null;
		try
		{
			out = response.getWriter();
			response.setCharacterEncoding("UTF-8");
			switch (type)
			{
				case 1:
					response.setContentType("text/html;charset=UTF-8");
					break;
				case 2:
					response.setContentType("text/xml;charset=UTF-8");
					break;
			}
			out.write(value);
			out.flush();
		}
		catch (IOException e)
		{
			Log.getLogger().error("Out Writer Error...", e);
		}
		finally
		{
			out.close();
		}
	}

	public String getUrl()
	{
		return url;
	}

	public void setUrl(String url)
	{
		this.url = url;
	}

	public String getMsg()
	{
		return msg;
	}

	public void setMsg(String msg)
	{
		this.msg = msg;
	}

	@SuppressWarnings("unchecked")
	public void setSession(Map session)
	{
		this.session = session;
	}

	public void setServletRequest(HttpServletRequest request)
	{
		this.request = request;
	}

	public void setServletResponse(HttpServletResponse response)
	{
		this.response = response;
	}

	@SuppressWarnings("unchecked")
	public List getList()
	{
		return list;
	}

	@SuppressWarnings("unchecked")
	public void setList(List list)
	{
		this.list = list;
	}

	public int getPageNumber()
	{
		return pageNumber;
	}

	public void setPageNumber(int pageNumber)
	{
		this.pageNumber = pageNumber;
	}

	public int getPageSize()
	{
		return pageSize;
	}

	public void setPageSize(int pageSize)
	{
		this.pageSize = pageSize;
	}

	public int getFullListSize()
	{
		return fullListSize;
	}

	public void setFullListSize(int fullListSize)
	{
		this.fullListSize = fullListSize;
	}

	public String[] getSerial()
	{
		return serial;
	}

	public void setSerial(String[] serial)
	{
		this.serial = serial;
	}
}

 

import java.util.HashMap;
import java.util.Map;

import com.auto.entity.Roleinfo;
import com.auto.service.BaseService;

public class RoleinfoAction extends BaseAction
{
	private static final long serialVersionUID = -128991403689032079L;
	
	private Roleinfo info;
	
	public String find()
	{
		if(null != info)
		{
			info = new BaseService<Roleinfo>().query(info);
		}
		return SUCCESS;
	}
	
	@SuppressWarnings("unchecked")
	public String list()
	{
	 	Map map = null;
        if (null != info)
        {
            map = new HashMap();
            map.put("Operatorid", info.getOperatorid());
        }
		queryPageList("Roleinfo", BaseService.class, Roleinfo.class, map);
		return SUCCESS;
	}

	public String insert() throws Exception
	{
		try
        {
            return new BaseService<Roleinfo>().insert(info) ? ADDSUCCESS : ADDFAILED;
        }
        catch (Exception e)
        {
            throw e;
        }
	}
	
	public String modify() throws Exception
	{
        try
        {
            if (null != info)
            {
                new BaseService<Roleinfo>().update(info);
            }
            return ADDSUCCESS;
        }
        catch (Exception e)
        {
        	throw e;
        }
	}

	public String delete() throws Exception
    {
     	try
        {
        	deleteByStrings(Roleinfo.class);
        	return ADDSUCCESS;
	  	}
        catch (Exception e)
        {
        	throw e;
        }
    }
	
	public Roleinfo getInfo()
    {
        return info;
    }
    
    public void setInfo(Roleinfo info)
    {
        this.info = info;
    }
}

 

分享到:
评论

相关推荐

    utils类及baseAction

    在Java编程中,`Utils` 类和 `BaseAction` 是两个常见的概念,它们在软件开发中扮演着重要的角色。下面将详细阐述这两个概念及其在实际应用中的作用。 首先,我们来了解一下 `Utils` 类。`Utils`(工具类)通常是...

    SHH 框架 继承 说明 案例

    例如,你可能有一个BaseAction类,其中包含了通用的验证和授权方法,然后所有的具体业务Action类都可继承自这个BaseAction,从而继承这些功能。 案例分析:文件"SHH框架继承 - 魏泽腾.doc"很可能提供了关于如何在...

    基础类和常用操作实现

    7. **×××DAO** 和 **×××DaoImpl**:这是自定义的DAO接口和实现类,它们继承自`GenericDao&lt;T&gt;`,并可能包含针对特定业务的额外方法。 8. **×××Rule**:业务逻辑类,实现了具体业务操作。这类类通常会处理...

    struts2简单应用代码

    Action类需要继承Struts2提供的BaseAction或实现Action接口,并定义相应的execute方法。 5. **结果类型Result** 结果类型定义了Action执行后的跳转逻辑。Struts2支持多种Result类型,如dispatcher(默认的,转发到...

    基于JAVA SMART系统-系统框架设计与开发(源代码+论文).zip

    因此,在对本系统进行架构设计的时候,考虑建立一个抽象的BaseAction类,该类继承LookupDispatchAction,实现LookupDispatchAction类中的getKeyMethodMap方法,在方法中返回本系统中请求参数值与资源文件中参数值的...

    <<项目架构那点儿事>>——浅析web层struts2的构建

    首先,我们来看`BaseAction.java`,这是一个基础Action类,通常包含了一些公共方法和属性,如登录验证、权限控制等。开发者可以继承这个基类,减少代码重复,提高代码复用性。BaseAction中的方法会处理来自用户请求...

    struts带进度条上传

    - `BaseAction`类或继承自它的其他Action类应该包含处理文件上传的逻辑。例如,读取上传文件并保存到服务器上,同时更新进度信息。 2. **进度更新机制**: - JavaScript中的`process()`函数通过Ajax向`...

    java javascript

    在这个例子中,Action需要继承自BaseAction,BaseAction提供了一些基础功能,如增删查改。Action层通过@Autowired注解来注入需要的Service实例,例如UserService。同时,如果要使用BaseAction中的方法,还需要注入...

    ibatis+spring+struts2 整合开发例子

    在实际开发中,开发者通常会创建一个BaseAction类,继承自Struts2的ActionSupport类,并注入必要的Service,这样可以减少重复代码。对于Mapper接口,每个接口对应一个XML文件,其中包含SQL语句和结果映射。当...

    ssh整合步骤

    - 创建一个基类`BaseAction`,继承自Struts的Action类,主要用于获取Spring的ApplicationContext,以便通过ID获取所需的bean。 11. **Struts配置**: - 使用`struts-config.xml`文件,通过右键向导新建登录动作...

    SSH框架整合配置过程

    然后,为了提高代码复用性和模块化,作者创建了一个名为`BaseAction`的类,放在`com.address.struts.action`包中。这个类可以作为其他Action类的基类,封装了一些通用的功能,如对HTTP请求和session的操作。这样做...

    快速开发后台框架

    `BaseAction` 类很可能包含了所有后台操作的通用方法和逻辑,如权限验证、数据过滤、日志记录等。开发者可以继承这个基类,创建自己的控制器,从而减少重复代码,提高代码复用性。 其次,`Form.class.php` 文件可能...

    struts2.5.16-jar包

    3. **定义Action类**:Action类是处理用户请求的核心,它继承自Struts2提供的BaseAction类,或者实现Action接口,并包含处理业务逻辑的方法。 4. **创建结果视图**:Struts2支持多种结果视图,如JSP、FreeMarker、...

    Spring课件,spring入门学习之用

    - **ResumeAddAction 示例**:这部分展示了一个名为 `ResumeAddAction` 的类示例,该类继承自 `BaseAction` 类,并重写了 `doExecute` 方法。这个例子中使用了依赖注入的方式获取 `ResumeService` 对象,并调用了 `...

    struts 实现文件上传与下载

    - `javax.servlet.http.*`: 包含了处理HTTP请求和响应的相关接口和类。 - `org.apache.struts.*`: Struts框架的核心类库。 - `com.css.*`: 自定义的包,可能包含了一些业务逻辑或自定义的实体类等。 3. **文件...

    Struts2中Action中是否需要实现Execute方法

    当Action类继承自`ActionSupport`或`BaseAction`时,实际上已经间接地实现了`execute`方法。`ActionSupport`类中的`execute`方法默认返回"success"视图。因此,如果你的Action类继承了`ActionSupport`,你可以选择...

    Java实现真分页.自己领悟.

    `AreaAction.java`可能是具体的业务操作类,它继承了`BaseAction.java`,实现了特定领域的分页操作。 `AccNodes.java`可能是表示数据节点的类,包含了分页数据的实体对象。这些节点可能被用于构建分页列表,每个...

    web资源 完本

    在Web应用的底层,BaseAction通常是一个基类,包含了通用的方法和属性,为其他Action提供继承和复用的基础。这可能包括错误处理、请求参数解析、会话管理等功能。这样做可以保持代码的整洁和一致性,减少重复工作。 ...

    ssh整合

    1. **建立公共函数类**:在`com.address.struts.action`包中创建了一个名为`BaseAction`的基类,用来提取并封装一些通用方法,如Session和Request的处理。这样可以减少代码重复,提高代码复用率,同时使Action类更...

Global site tag (gtag.js) - Google Analytics