今天在JDF下面封装struts2。
由于JDF的bean 和 struts的action 不是一个东西,当然可以做在一起,但是做在一起会有耦合的问题,而且灵活性大大降低,所以就写了个简单的对象赋值的方法。
假设一个UserBean是和表映射的
有一个UserAction 是和JSP表单映射的。
这里的字段变量名字都是一样,那么我们可以写一个公用的方法,用于转换两个对象的值的对应。
代码如下,Wrap类
public class ObjectTransWrap { public static Object wrap(Object actionObj,Class OperatorAction) throws Exception, InstantiationException{ Object o = OperatorAction.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(actionObj.getClass()); PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors(); Method get = null; Method set = null; for (int i = 0; i < properties.length; i++) { try{ get = properties[i].getReadMethod(); set = o.getClass().getMethod( properties[i].getWriteMethod().getName(), new Class[]{properties[i].getPropertyType()}); }catch(Throwable a){ continue; } if(set!=null&&get!=null){ set.invoke(o, new Object[]{get.invoke(actionObj, new Object[]{})}); set = null; get = null; } } return o; }
下面我们新建两个Bean。
UserBean.java
public class UserBean{ private String name = ""; private long age = -1; public long getAge(){ return age; } public String getName(){ return name; } public void setAge( long age ){ this.age = age; } public void setName( String name ){ this.name = name; } }
UserAction.java
public class UserAction{ private String name = ""; private long age = -1; public long getAge(){ return age; } public String getName(){ return name; } public void setAge( long age ){ this.age = age; } public void setName( String name ){ this.name = name; } }
main函数
public static void main(String[] args) throws InstantiationException, Exception{ UserAction a = new UserAction(); a.setName("名字"); a.setAge(22); UserBean bean = (UserBean)wrap(a,UserBean.class); System.out.println("name="+bean.getName()); System.out.println("age="+bean.getAge()); }
输出结果是:
name=名字age=22
两个bean的值复制成功。但是我感觉我写的上面的代码是在重复的造轮子。JDK里面貌似有这样的方法
作者keyboardsun ,转载请标明出处
您还没有登录,请您登录后再发表评论
【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法 ) https://hanshuliang.blog.csdn.net/article/details/113883540 博客源码快照
在Java中,`java.io`和`java.nio`这两个包提供了丰富的API来支持文件操作。`File`类是`java.io`包中的核心类,它代表了文件或者目录,并提供了许多静态和非静态的方法来处理文件。例如: 1. **创建和删除文件**:`...
其次,`request.getParameter(String name)`方法用于获取指定名称的请求参数的第一个值。如果请求中存在多个同名参数,该方法只会返回第一个出现的值。在上述例子中,`request.getParameter("name")`将返回`"John"`...
这个数独计算器程序是用Java语言编写的,它包含了用户界面和逻辑计算两大部分。首先,我们来看程序的结构。 程序的核心部分是一个名为`Myframe`的类,它继承自`JFrame`,这意味着它是Java Swing中的一个窗口组件。`...
"filed-mimefix"是一个专为前端开发设计的开源库,其主要目标是处理和修正文件的MIME类型问题。在深入探讨这个库之前,我们先来理解一下MIME类型及其在前端开发中的作用。 MIME(Multipurpose Internet Mail ...
- 数据序列化和反序列化:将Java对象转换为XML或JSON格式,反之亦然。 13. **加密解密Utils**: - 加密算法:如MD5、SHA、AES等,保护敏感信息。 14. **ExcelUtils**: - Excel文件操作:读取、写入Excel数据,...
在给定的部分代码示例中,通过定义`DelFile`类并实现`delete()`和`deleteDirectory()`两个辅助方法,展示了如何实现这一功能: ```java public static void delete(File file) { File[] files = file.listFiles();...
在`field_assignment`的场景下,这个API可能包含了一系列用于设置和处理对象字段的方法。 1. **字段(Field)**:在面向对象编程中,字段是类的成员变量,用来存储数据。每个对象实例都可以有自己的字段值,字段...
根据给定的信息,我们可以归纳出以下关于Java、Oracle与MySQL数据库配置的相关知识点: ### 一、数据库驱动配置 #### 1. **SQL Server 配置** - **JTDs (Java to Data Source)**: 一种开源的 JDBC 驱动程序,用于...
2. **数组**:由一对方括号 `[]` 包围的值列表,每个值称为元素,可以用逗号 `,` 分隔。 #### 三、示例解析 ##### 示例 1: ```json { "sid": "ed4fee00-8e12-4f57-abb8-5469bc36b12b", "source": "b2b", "key...
Redis哈希是一种类似于Java的HashMap的数据结构,用于存储哈希表数据类型。常用命令有: * HSET:设置多个field的值 * HGET:获取指定filed的值 * HGETALL:返回hash表所有的域和值 * HMSET:和HSET类似(已弃用) ...
在JavaScript中,遍历对象的属性和值是常见的操作,特别是在处理数据展示、对象操作或者进行数据转换时。本文将详细讲解如何遍历JavaScript对象的属性和值,并以实例解析遇到的问题及其解决方案。 首先,我们要了解...
构造器注入主要用于某些类因为某种原因不能作为 Bean,只是一个普通类。可以通过类的构造方法传入需要调用的 Bean 接口。这种方式的优点是可以确保依赖项的正确性,但需要注意的是,构造方法的参数顺序和类型必须与 ...
javacard applet 开发实例 正常运行 带jar包 package mifare; import com.ibm.jz.JZSystem; import javacard.framework.APDU; import javacard.framework.Applet; import javacard.framework.ISO7816; import ...
这个压缩包包含了用于超声场可视化研究和图形用户界面(GUI)仿真的代码和资源。 【描述】"谭智源-基于Matlab的超声场可视化研究及GUI仿真模拟" 指出,这个项目的核心是利用MATLAB强大的计算和可视化功能,对超声波...
Java Swing库中的JTextField组件是用于创建用户输入文本的简单单行字段,它是GUI应用程序中常见的一种交互元素。本文将详细介绍JTextField的使用方法、功能特性以及如何在实际编程中应用。 1. **JTextField简介** ...
这一过程不仅用于数据备份,还可以实现数据的迁移和复制,构建测试和生产环境的相似数据库,确保数据安全的同时,提高开发和维护效率。 #### 二、数据导出(Export) 数据导出可以通过以下几种方式执行: 1. **...
这两种方式可以有效地帮助管理员创建两个几乎完全相同的数据库副本,一个用于正式生产环境,另一个则用于开发或测试环境,从而提高系统的可用性和可靠性。 #### 三、执行环境 - **SQL*Plus**: 可以在 SQL*Plus 中...
2. Mysql复制的整个过程,可以分为创建复制帐号、配置master和slave、Slave连接master开始复制三个步骤。 3. 使用mysqldump命令来备份数据库。 4. 在备机上使用mysql命令来倒入备份的数据库文件。 5. 配置文件的修改...
相关推荐
【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法 ) https://hanshuliang.blog.csdn.net/article/details/113883540 博客源码快照
在Java中,`java.io`和`java.nio`这两个包提供了丰富的API来支持文件操作。`File`类是`java.io`包中的核心类,它代表了文件或者目录,并提供了许多静态和非静态的方法来处理文件。例如: 1. **创建和删除文件**:`...
其次,`request.getParameter(String name)`方法用于获取指定名称的请求参数的第一个值。如果请求中存在多个同名参数,该方法只会返回第一个出现的值。在上述例子中,`request.getParameter("name")`将返回`"John"`...
这个数独计算器程序是用Java语言编写的,它包含了用户界面和逻辑计算两大部分。首先,我们来看程序的结构。 程序的核心部分是一个名为`Myframe`的类,它继承自`JFrame`,这意味着它是Java Swing中的一个窗口组件。`...
"filed-mimefix"是一个专为前端开发设计的开源库,其主要目标是处理和修正文件的MIME类型问题。在深入探讨这个库之前,我们先来理解一下MIME类型及其在前端开发中的作用。 MIME(Multipurpose Internet Mail ...
- 数据序列化和反序列化:将Java对象转换为XML或JSON格式,反之亦然。 13. **加密解密Utils**: - 加密算法:如MD5、SHA、AES等,保护敏感信息。 14. **ExcelUtils**: - Excel文件操作:读取、写入Excel数据,...
在给定的部分代码示例中,通过定义`DelFile`类并实现`delete()`和`deleteDirectory()`两个辅助方法,展示了如何实现这一功能: ```java public static void delete(File file) { File[] files = file.listFiles();...
在`field_assignment`的场景下,这个API可能包含了一系列用于设置和处理对象字段的方法。 1. **字段(Field)**:在面向对象编程中,字段是类的成员变量,用来存储数据。每个对象实例都可以有自己的字段值,字段...
根据给定的信息,我们可以归纳出以下关于Java、Oracle与MySQL数据库配置的相关知识点: ### 一、数据库驱动配置 #### 1. **SQL Server 配置** - **JTDs (Java to Data Source)**: 一种开源的 JDBC 驱动程序,用于...
2. **数组**:由一对方括号 `[]` 包围的值列表,每个值称为元素,可以用逗号 `,` 分隔。 #### 三、示例解析 ##### 示例 1: ```json { "sid": "ed4fee00-8e12-4f57-abb8-5469bc36b12b", "source": "b2b", "key...
Redis哈希是一种类似于Java的HashMap的数据结构,用于存储哈希表数据类型。常用命令有: * HSET:设置多个field的值 * HGET:获取指定filed的值 * HGETALL:返回hash表所有的域和值 * HMSET:和HSET类似(已弃用) ...
在JavaScript中,遍历对象的属性和值是常见的操作,特别是在处理数据展示、对象操作或者进行数据转换时。本文将详细讲解如何遍历JavaScript对象的属性和值,并以实例解析遇到的问题及其解决方案。 首先,我们要了解...
构造器注入主要用于某些类因为某种原因不能作为 Bean,只是一个普通类。可以通过类的构造方法传入需要调用的 Bean 接口。这种方式的优点是可以确保依赖项的正确性,但需要注意的是,构造方法的参数顺序和类型必须与 ...
javacard applet 开发实例 正常运行 带jar包 package mifare; import com.ibm.jz.JZSystem; import javacard.framework.APDU; import javacard.framework.Applet; import javacard.framework.ISO7816; import ...
这个压缩包包含了用于超声场可视化研究和图形用户界面(GUI)仿真的代码和资源。 【描述】"谭智源-基于Matlab的超声场可视化研究及GUI仿真模拟" 指出,这个项目的核心是利用MATLAB强大的计算和可视化功能,对超声波...
Java Swing库中的JTextField组件是用于创建用户输入文本的简单单行字段,它是GUI应用程序中常见的一种交互元素。本文将详细介绍JTextField的使用方法、功能特性以及如何在实际编程中应用。 1. **JTextField简介** ...
这一过程不仅用于数据备份,还可以实现数据的迁移和复制,构建测试和生产环境的相似数据库,确保数据安全的同时,提高开发和维护效率。 #### 二、数据导出(Export) 数据导出可以通过以下几种方式执行: 1. **...
这两种方式可以有效地帮助管理员创建两个几乎完全相同的数据库副本,一个用于正式生产环境,另一个则用于开发或测试环境,从而提高系统的可用性和可靠性。 #### 三、执行环境 - **SQL*Plus**: 可以在 SQL*Plus 中...
2. Mysql复制的整个过程,可以分为创建复制帐号、配置master和slave、Slave连接master开始复制三个步骤。 3. 使用mysqldump命令来备份数据库。 4. 在备机上使用mysql命令来倒入备份的数据库文件。 5. 配置文件的修改...