`
gulufather
  • 浏览: 16861 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts中通过反射给领域对象赋值的方法

阅读更多
在struts的action中 总有这样的情况
用struts1.x是从from里取值 然后放入一个对象
用struts2.x是从this.里取值 然后放入一个对象
然后对这个对象进行操作

代码一大串都出现在action中
非常难看 代码质量下降 总是在拷贝粘贴代码
刚写了个类解决这个问题
package com.harmony.themis.onDuty.web.action;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import com.harmony.themis.commons.web.action.BaseAction;
 

public class ObjectSetValue  {
	 	public Object getValueByAction(String returnClassName/*需要赋值的类的className*/, BaseAction baseAction/*你的action父类是谁这里就写谁 如果是自定义的这个参数类型得改 也可以是from*/)  {
		Object obj =  null;
		Map map = new HashMap();
		Method[] methodes = null;
		//将action中所有方法放入到map 中 这个map只为查询是否有get方法
		methodes = baseAction.getClass().getMethods();
		for(Method met : methodes){ 
			map.put(met.getName(), "");
		}
		try {
			  obj = Class.forName(returnClassName).newInstance();
		} catch (InstantiationException e) {
			 
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			 
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			 
			e.printStackTrace();
		}
		
		try {
			methodes = Class.forName(returnClassName).getMethods();
		} catch (SecurityException e) {
			 
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			 
			e.printStackTrace();
		}
		//循环类的所有方法
		for(Method met : methodes){ 
			//如果是set方法
			if(met.getName().indexOf("set")==0){
				//得到除去set的属性名
				String metName = met.getName().replaceFirst("set", "");
				//得到get方法的方法名
				String getMetName = "get"+metName;
				try {
					//如果action中有对应的get方法
					if(map.containsKey(getMetName)){
					 	 //执行类的set方法 对应action的get方法
					 	met.invoke(obj,new Object[] {baseAction.getClass().getMethod(getMetName,   new  Class[]{ }).invoke(baseAction, new  Class[]{ }) } ) ;
					 }
						
				} catch (IllegalArgumentException e) {
					e .printStackTrace();
				} catch (IllegalAccessException e) {
					e .printStackTrace();
				} catch (InvocationTargetException e) {
					e .printStackTrace();
				} catch (SecurityException e1) {
					e1.printStackTrace();
				} catch (NoSuchMethodException e1) {
				    e1.printStackTrace();
				}
			}
		}
		return obj;
	}

}

分享到:
评论
4 楼 nothink 2010-04-27  
有样东西叫OGNL
3 楼 gulufather 2010-04-21  
weiqingfei 写道
Apache的commons-beanutils包里,有个叫做BeanUtils.copyProperties的方法。

多谢提醒 还是我孤陋寡闻了 一会去看看
2 楼 weiqingfei 2010-04-21  
Apache的commons-beanutils包里,有个叫做BeanUtils.copyProperties的方法。
1 楼 congdepeng 2010-04-21  
观望本贴

相关推荐

    Struts中FormBean的日期类型字段赋值自动转化

    本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 FormBean是Struts中的一种特殊Java类,用于封装HTTP请求中的参数。它们通常继承自`org.apache.struts....

    利用反射 实现一个自制的struts

    在自制的Struts中,你可以创建一个`Dispatcher`类,它接受请求和Action结果,然后使用`RequestDispatcher`的`forward()`方法将请求转发到相应的资源。反射在这里可以用来动态地查找和调用这个`Dispatcher`。 在实际...

    Struts2在Action中获得Response对象的四种方法

    在 Struts2 中,可以通过实现Aware接口来获取 Response 对象。例如,要获取 HttpServletResponse 对象,需要实现 org.apache.struts2.interceptor.ServletResponseAware 接口。下面是一个示例代码: ```java ...

    struts2中获得request对象

    本文将详细讲解在Struts2中获取`request`对象的几种常见方法,以及它们的适用场景。 1. **Action上下文(ActionContext)** `ActionContext`是Struts2的核心组件之一,它封装了与当前请求相关的所有上下文信息,...

    struts2 json传输对象文档+jar包

    4. 设置返回值:在方法中填充Map或对象的属性,Struts2会自动将这些数据转换为JSON格式。 5. 客户端处理:在JavaScript中,可以通过Ajax请求获取到JSON数据,并使用JSON.parse()解析为JavaScript对象,然后进行...

    使用反射自动装填前台数据和struts自动装填很像

    在Java开发中,Struts框架和反射都是常用于处理数据绑定和对象操作的重要工具。本文将深入探讨这两种技术,特别是它们在自动装填前台数据方面的相似性。 首先,让我们了解Struts框架。Struts是一个开源的MVC(Model...

    Struts2最佳实践之一-在复杂实体对象中,如何将页面参数转换为实体对象

    Struts2通过ActionSupport类中的默认数据绑定方法`setParameters()`实现了请求参数到Action属性的映射。当Action类继承自ActionSupport时,Struts2会自动将请求参数按照属性名进行匹配并赋值。例如,如果页面上有名...

    Struts2 Java反射机制

    NULL 博文链接:https://chaoyi.iteye.com/blog/2156733

    Struts2中Action接收参数的方法

    Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性接收参数 在 Struts2 中,可以使用 ...

    struts中ActionForm的validate方法使用小得

    本文将详细讨论如何在Struts中使用ActionForm的`validate`方法进行数据验证。 `validate`方法是在ActionForm中定义的一个可选方法,用于在提交表单数据后验证用户输入的有效性。这个方法通常会在调用Action的`...

    Struts2+JSON_实现AJAX_返回对象和列表

    这样,当Action执行并返回`SUCCESS`时,Struts2的JSON插件会自动将`users`对象序列化为JSON格式,并将其作为响应发送给客户端。 以下是`UserAction`的简要代码: ```java public class UserAction extends ...

    struts1.2 from表单提交包含list的对象

    在Struts1.2中处理表单提交,特别是当表单数据包含列表对象时,需要理解一些核心概念和技术。这篇博客文章可能详细探讨了如何在Struts1.2中处理这类情况。 首先,让我们来了解Struts1.2中的表单提交流程。当用户在...

    Struts2返回JSON对象的方法总结完整实例

    但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况。本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于既定框架结构下进行的。 Struts2返回JSON有两种方式:1.使用Servlet的输出流写入...

    Struts2访问request,session,application的四种方式

    OGNL是Struts2中强大的表达式语言,它允许开发者直接在JSP或Action中通过表达式来访问request、session和application中的数据。例如,`['key']" />`可以在页面上显示session中的值。在Action中,`ognl.get("session...

    struts底层代码

    在Struts中,反射主要用于实例化Action类,执行特定的动作方法。当一个HTTP请求到达时,Struts通过反射找到对应的Action类及其执行方法,然后根据配置文件中的信息来调用这个方法。 现在我们来看一下Struts的底层...

    自己模拟实现struts的dispatcherAction

    这通常通过`RequestDispatcher`的`forward()`方法完成,将请求和响应对象传递给目标Action,然后由Action处理业务逻辑并返回结果。 7. **实际应用中的优化**: 实际的Struts框架在DispatcherAction的实现上还考虑...

    探讨Struts的初始化方法

    - 接着通过`ClassLoader.loadClass(factoryClass)`加载该类,并将其赋值给`MessageResourcesFactory.clazz`。 - 最后,通过`newInstance()`方法创建该类的一个实例。 **4. MessageResources的配置与使用** - ...

    Struts2教程:获得HttpServletResponse对象

    这个接口定义了一个方法`setServletResponse(HttpServletResponse response)`,当Action实例被创建时,Struts2框架会自动调用这个方法将`HttpServletResponse`对象注入到Action中。 下面是一个具体的示例代码: ``...

    struts2 获取request

    struts2 获取request session对象

Global site tag (gtag.js) - Google Analytics