ActionForm

ActionForm是什么?

ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTO(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。

我们为什么要使用它?

因为我们要将页面的数据传到后台,也就是从表示层传到逻辑层。要利用ActionForm对象来临时存放视图页面中的表单数据

怎么使用ActionForm?

1、得到页面的Map集合
2、配置xml
3、通过反射得到对象
4、得到对象的字段
5、method.invoke(对象,map.get(key));【通过反射给当前对象set值】
6、验证(正则表达式写一款通用的正则表达式);

 

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<actions>
 <actionForm name="newForm" class="com.lxit.company.bean.NewsVo"/>
 <action  name="company" class="com.lxit.company.action.AdministratorAction">
  <forward name="doValidate" type="redirect">company.0905?method=doLogin</forward>
  <forward name="doSave">company.0905?method=doSave</forward>
  <forward name="doFindAll">company.0905?method=doFindAll</forward>
  <forword name="aindex" type="redirect">index.jsp</forword>
  <forword name="showUserList">showUserList.jsp</forword>
  <forword name="addManager">addManager.jsp</forword>
  <forward name="index" type="redirect">admin/index.jsp</forward>
  <forward name="login" type="redirect">login.jsp</forward>
  <forward name="error">error.jsp</forward>
  <forward name="doRemoveCookie">company.0905?method=doRemoveCookie</forward>
 </action>
 
 <newsAction form="newForm" name="newsAction" class="com.lxit.company.action.NewsAction">
  <forward name="doSave">newsAction.0905?method=doSave</forward>
  <forward name="addNews">addNews.jsp</forward>
  <forward name="doFindAll">newsAction.0905?method=doFindAll</forward>
  <forward name="manageNews">manageNews.jsp</forward>
  <forward name="doShowNewsIndex" type="redirect">newsAction.0905?method=doShowNewsIndex</forward>
  <forward name="showNewsList">showNewsList.jsp</forward>
  <forward name="index">index.jsp</forward>
  <forward name="detailNews">detailNews.jsp</forward>
  <forward name="doObscure">newsAction.0905?method=doObscure</forward>
 </newsAction>
 
 <goodsAction name="goodsAction" class="com.lxit.company.action.GoodsAction">
  <forward name="doSave">goodsAction.0905?method=doSave</forward>
  <forward name="addProduct">addProduct.jsp</forward>
  <forward name="doFindAll">goodsAction.0905?method=doFindAll</forward>
  <forward name="manageProduct">manageProduct.jsp</forward>
  <forward name="updateProduct">updateProduct.jsp</forward>
  <forward name="doShowProductList">goodsAction.0905?method=doShowProductList</forward>
  <forward name="showProductList">showProductList.jsp</forward>
  <forward name="detailProduct">detailProduct.jsp</forward>
 </goodsAction>
 
 <messageAction name="messageAction" class="com.lxit.company.action.MessageAction">
  <forward name="doSave">messageAction.0905?method=doSave</forward>
  <forward name="doFindAll">messageAction.0905?method=doFindAll</forward>
  <forward name="newMessage">newMessage.jsp</forward>
  <forward name="messageBoard">messageBoard.jsp</forward>
 </messageAction>
 
 <ajaxAction name="ajaxAction" class="com.lxit.company.action.AjaxAction">
  <forward name="doSave">ajaxAction.0905?method=doJudge</forward>
 </ajaxAction>
 
 <company name="mysql">
  <mysql name="mysql.driver" value="com.mysql.jdbc.Driver"></mysql>
  <mysql name="mysql.url" value="jdbc:mysql://localhost:3306/company"></mysql>
  <mysql name="mysql.userName" value="root"></mysql>
  <mysql name="mysql.password" value="123"></mysql>
 </company>
</actions>

 

 

ConfigUtil

package com.lxit.company.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import com.lxit.company.action.ActionServlet;


/**
 * 
 * 文件名:ConfigUtil.java
 * 版权: 方勇
 * 描述: 对键值对进行批量处理
 * 修改时间: 2010-2-23下午02:43:00
 */
public class ConfigUtil {
	private final Logger logger=Logger.getLogger(ConfigUtil.class);
	private Document document=null;
	/**
	 * 批量导入键值对
	 * @param configPath
	 */
	public ConfigUtil() {
		logger.debug(StringUtil.append( "ConfigUtil", Common.BEGIN));		
		SAXBuilder builder=new SAXBuilder();
		FileInputStream fileInputStream=null;
		try {
			fileInputStream = new FileInputStream(ActionServlet.configPath);
			document=builder.build(fileInputStream);
		} catch (FileNotFoundException e) {
			logger.error(StringUtil.append("ConfigUtil",e.getMessage()));
		} catch (JDOMException e) {
			logger.error(StringUtil.append("ConfigUtil",e.getMessage()));
		} catch (IOException e) {
			logger.error(StringUtil.append("ConfigUtil",e.getMessage()));
		}finally{
			try{
				if(null!=fileInputStream){
					fileInputStream.close();
				}				
			} catch (IOException e) {
				logger.error(StringUtil.append("ConfigUtil",e.getMessage()));
			}
		}
		logger.debug(StringUtil.append( "ConfigUtil", Common.END));
	}
	/**
	 * 
	 * 〈得到action节点〉
	 * @param [key]     [键值]
	 * @return  [Element]
	 * @Author 方勇
	 */
	public Element getActionElement(String key){
		logger.debug(StringUtil.append( "getActionElement", Common.BEGIN));
		Element actionElement=null;
		Element root=document.getRootElement();
		@SuppressWarnings("unchecked")
		List<Element> children=root.getChildren();
		String value=null;
		for (Element element : children) {
			value=element.getAttributeValue("name");
			if(key.equals(value)){
				actionElement=element; 
				break;   
			}
		}
		logger.debug(StringUtil.append( "getActionElement", Common.END));
		return actionElement;
	}

	/**
	 * 
	 * 〈通过key获取value〉
	 * @param [key]     [键值]
	 * @return  [string类型的value]
	 * @Author 方勇
	 */
	public String getActionValue(String key){		
		return getActionElement(key).getAttributeValue("class");
	}

  /**
   * 
   * 〈得到action节点〉
   * 
   * @param [key] [键值]
   * @return [Element]
   * @Author 方勇
   */
  public Element getActionFormElement(String key) {
    Element actionElement = null;
    Element root = document.getRootElement();
    @SuppressWarnings("unchecked")
    List<Element> children = root.getChildren();
    String value = null;
    for (Element element : children) {
      value = element.getAttributeValue("name");
      if (key.equals(value)) {
        actionElement = element;
        break;
      }
    }
    return actionElement;
  }

  /**
   * 
   * 〈通过key获取value〉
   * 
   * @param [key] [键值]
   * @return [string类型的value]
   * @Author 方勇
   */
  public String getActionFormValue(String key) {
    return getActionElement(key).getAttributeValue("class");
  }

  /**
   * 
   * 〈通过key获取value〉
   * 
   * @param [key] [键值]
   * @return [string类型的value]
   * @Author 方勇
   */
  public String getActionFormName(String key) {
    return getActionElement(key).getAttributeValue("form");
  }

	/**
	 * 
	 * 〈获取forward节点〉
	 * @param [actionName]     [action节点的值]
	 * @param [forwardVlue]     [forward节点的name值]
	 * @return  [Element]
	 * @Author 方勇
	 */
	public Element getForwardElement(String actionName,String forwardValue){
		logger.debug(StringUtil.append( "getForwardElement", Common.BEGIN));
		Element forwardElement=null;
		Element actionElement=getActionElement(actionName);
		@SuppressWarnings("unchecked")
		List<Element> children=actionElement.getChildren();
		String value=null;
		for (Element element : children) {
			value=element.getAttributeValue("name");
			if(forwardValue.equals(value)){
				forwardElement=element; 
				break;   
			}
		}
		logger.debug(StringUtil.append( "getForwardElement", Common.END));
		return forwardElement;
	}
	/**
	 * 
	 * 〈得到forward节点值〉
	 * @param [actionName]     [action节点的name值]
	 * @param [forwardName]     [forward节点的name值]
	 * @return  [String]
	 * @Author 方勇
	 */
	public String getForwardValue(String actionName,String forwardValue){
		Element forwardElement = getForwardElement(actionName,forwardValue);
		return forwardElement.getText();
	}
	/**
	 * 
	 * 〈得到跳转页面类型〉
	 * @param [actionName]     [action节点的name值]
	 * @param [forwardName]     [forward节点的name值]
	 * @return  [String]
	 * @Author 方勇
	 */
	public String getForwardType(String actionName,String forwardValue){
		logger.debug(StringUtil.append("getForwardType", Common.BEGIN));
		String type=null;
		Element forwardType=getForwardElement(actionName,forwardValue);
		type=forwardType.getAttributeValue("type");
		logger.debug(StringUtil.append("getForwardType", Common.END));
		return type;
	}
	/**
	 * 
	 * 〈数据库连接〉
	 * @param [companyName]     [company节点的name值]
	 * @param [mysqlName]     [mysqlName节点的值]
	 * @return  [Element]
	 * @Author 方勇
	 */
	public Element getDbElement(String companyName,String mysqlName){
		logger.debug(StringUtil.append("getDbElement", Common.BEGIN));
		Element forwardElement=null;
		Element actionElement=getActionElement(companyName);
		@SuppressWarnings("unchecked")
		List<Element> children=actionElement.getChildren();
		String value=null;
		for (Element element : children) {
			value=element.getAttributeValue("name");
			if(mysqlName.equals(value)){
				forwardElement=element; 
				break;   
			}
		}
		logger.debug(StringUtil.append("getDbElement", Common.END));
		return forwardElement;
	}
	/**
	 * 
	 * 〈得到数据库连接的节点值〉
	 * @param [companyName]     [company节点的name值]
	 * @param [mysqlName]     [mysqlName节点的值]
	 * @return  [String]
	 * @Author 方勇
	 */
	public String getDbValue(String companyName,String mysqlName){
		Element forwardElement = getDbElement(companyName,mysqlName);
		return forwardElement.getAttributeValue("value");
	}
}

 

 

ActionFormUtil

package com.lxit.company.util;

import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class ActionFormUtil {

	private static ActionFormUtil instance = null;
	
	public ActionFormUtil(){

	}
	
	public static synchronized ActionFormUtil getInstance(){
		if(null == instance){
			instance = new ActionFormUtil();
		}
		return instance;
	}
	
  public Object getActionForm(String actionFormKey) {
    ConfigUtil configUtil = new ConfigUtil();
    // action节点对应的form名
    String form = configUtil.getActionFormName(actionFormKey);

    // ActionForm类路径
    String actionForm = configUtil.getActionFormValue(form);

    Object object = null;
    try {
      object = Class.forName(actionForm).newInstance();
    } catch (InstantiationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return object;
	}

  public Object mapToObject(Map map, Object object) {
    // key集合
    Set keySet = map.keySet();
    // map集合
    Map fieldsMap = getFields(object);
    for (Object object2 : keySet) {
      if (fieldsMap.containsKey(object2)) {
        Method[] methods = object.getClass().getMethods();
        for (Method method : methods) {
          String name = method.getName();
          if (name.startsWith("set") && object2.equals(name.substring(3).toLowerCase())) {
            try {
              String[] str = (String[]) map.get(object2);

              method.invoke(object, str[0]);
            } catch (IllegalArgumentException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (IllegalAccessException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (InvocationTargetException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
        }
      }
    }
    return object;
  }

  public Map getFields(Object object) {
    Map map = new HashMap();
    Method[] methods = object.getClass().getMethods();
    for (Method method : methods) {
      String name = method.getName();
      if (name.startsWith("set")) {
        String field = name.substring(3).toLowerCase();
        map.put(field, null);
      }
    }
    return map;

  }
}

 

 

newAction调用

    NewsVo newsVo = (NewsVo) ActionFormUtil.getInstance().getActionForm("newsAction");
    ActionFormUtil.getInstance().mapToObject(request.getParameterMap(), newsVo);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值