`
阅读更多

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);

 

分享到:
评论

相关推荐

    Struts_学习笔记之ActionForm

    Struts学习笔记之ActionForm ActionForm是Struts框架中的一种重要组件,用于封装和处理用户的表单数据。在Struts中,ActionForm是继承自JavaBeans的,主要用于处理用户的表单数据和业务逻辑。下面是ActionForm的...

    验证ActionForm存到了request中

    标题"验证ActionForm存到了request中"涉及到的是Struts框架中ActionForm对象的使用和处理过程。ActionForm是Struts框架的核心组件之一,它主要用于收集用户在表单中的输入数据,并将这些数据传递到Action类进行业务...

    Struts Hibernate Spring 集成开发宝典 actionform

    本集成开发宝典主要关注如何将这三者有效地结合,以ActionForm为切入点,深入讲解它们的整合过程。 Struts 是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它主要用于控制应用的流程,处理用户请求...

    ActionForm里的get和set方法

    ActionForm是Struts框架中一个关键的组件,它充当了Controller与Model之间的桥梁,负责传递用户在表单中提交的数据到业务逻辑层。本篇文章将深入探讨ActionForm中的get和set方法及其作用。 1. **ActionForm基础** ...

    java web ,简化actionform

    本文将深入探讨Struts1框架下如何通过ActionForm简化表单处理,以及实体类与ActionForm之间的交互。 ### 实体类(Entity) 在Struts框架中,实体类(如`userEntity`)用于封装业务数据,是模型(Model)的一部分。...

    struts中ActionForm的validate方法使用小得

    在Struts中,ActionForm类是处理用户输入数据的核心组件,它封装了请求参数并负责业务逻辑验证。本文将详细讨论如何在Struts中使用ActionForm的`validate`方法进行数据验证。 `validate`方法是在ActionForm中定义的...

    struts1使用actionform实现表单验证

    ActionForm是Struts1中处理用户输入的核心组件,它负责接收、验证和封装来自表单的数据。在本文中,我们将深入探讨如何利用ActionForm实现表单验证,并在验证失败时追加错误信息。 1. **ActionForm介绍** ...

    一个Jsp两个ActionForm分别提交.rar

    一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar

    提交多行数据到Struts的ActionForm的List属性中

    当我们需要在客户端提交多行数据时,通常会利用表单来收集信息,然后将这些数据传递到服务器端的ActionForm。这个过程涉及到如何将客户端的数据组织成一个集合,如List,并将其绑定到ActionForm的属性上。在本篇中,...

    struts中静态ActionForm基本验证

    主要是actionForm的基本验证,重写validate方法,返回actionErrors,然后根据资源文件显示错误。 这是一个demo例子,直接导入eclispe中即可。 并且这部分内容会在相应的博客中介绍,稍后会更新博客。

    Struts高级开发_动态ActionForm.avi

    动态ActionForm则旨在解决这个问题,它允许我们在运行时动态地创建和绑定ActionForm,而不是预先定义固定的ActionForm类。 在讲解动态ActionForm的过程中,通常会涵盖以下几个关键点: 1. **ActionForm接口**:...

    struts 视频 struts视频 actionform

    3. **ActionForm的使用**:如何创建ActionForm类,定义属性并添加对应的get和set方法,以及如何在struts-config.xml中配置ActionForm。 4. **数据验证**:ActionForm不仅可以收集数据,还可以进行数据验证。通过...

    ActionForm_Scope为Session

    标题“ActionForm_Scope为Session”涉及到的是Struts框架中的一个关键概念,即ActionForm对象的作用域设置。在Struts框架中,ActionForm是用于封装请求参数并传递给业务逻辑层(通常为Servelets或JavaBeans)的模型...

    [摘]Struts 学习笔记之ActionForm

    本篇学习笔记主要关注的是ActionForm,它是Struts框架中用于处理用户请求的核心组件之一。 ActionForm是Struts中用于接收和验证用户输入的数据的类。当用户通过表单提交数据时,这些数据会被封装到一个ActionForm...

    ValidatorActionForm,ValidatorForm和ActionForm.区别

    ### ValidatorActionForm、ValidatorForm 和 ActionForm 的区别 #### 一、ActionForm 概述 **ActionForm** 是 Struts 1.x 框架中用于封装用户输入数据的一个核心类,它通常作为表单对象的 JavaBean 实现。...

    Struts中不同的Action和ActionForm组合.rar

    在这个名为“Struts中不同的Action和ActionForm组合.rar”的压缩包中,主要探讨的是Struts框架中Action和ActionForm的组合使用方式,以及它们在处理用户请求和数据验证过程中的作用。以下是对这个主题的详细解释。 ...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    在Spring框架中,如果需要在ActionForm中注入其他对象,例如数据库访问层的服务,可能会遇到问题,因为ActionForm通常是非Spring管理的bean。 针对这个问题,一种解决办法是将注入的属性声明为静态,并修改setter...

Global site tag (gtag.js) - Google Analytics