- 浏览: 147652 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
liaozhi_ITOYO:
...
ibatis 学习笔记(一) 批量处理 存储过程 -
boy_scarecrow:
不错,借鉴了!
ibatis 学习笔记(一) 批量处理 存储过程 -
qingyushan:
羡慕啊
假如我是JAVA开发人员 -
salever:
不错,貌似少一点超时设置
Java Tcp Socket聊天系统模型(主要为了学习线程) -
zhaotao_king:
不错!~
假如我是JAVA开发人员
import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; /** * <strong>封装数据类</strong> * <p> * 从request中获取值填充bean对象。 * 相应功能struts中已经实现,建议使用struts进行页面到Form的处理。 * </p> * */ public class BeanUtil { private static final Logger log = Logger.getLogger(BeanUtil.class); /** * 从request中获取值填充bean对象 * * @param objClass bean的类 * @param request 请求对象 * @return object对象 */ public static Object fillBean(Class objClass, HttpServletRequest request) { Object objInstance = null; try { objInstance = objClass.newInstance(); } catch (InstantiationException e1) { log.error(e1.getMessage(), e1); } catch (IllegalAccessException e1) { log.error(e1.getMessage(), e1); } Field field; String fieldName; String fieldValue = ""; int len; len = objClass.getDeclaredFields().length; for (int i = 0; i < len; i++) { field = objClass.getDeclaredFields()[i]; fieldName = field.getName(); try { fieldValue = request.getParameter(fieldName); } catch (Exception e1) { log.error(e1.getMessage(), e1); } if (fieldValue != null) { try { setFieldValue(field, objInstance, fieldValue); } catch (IllegalAccessException e) { log.error(e.getMessage(), e); } } } objClass = objClass.getSuperclass(); return objInstance; } /** * 将数据赋值给指定对象的相应属性 * * @param field 字段 * @param objInstance 指定对象 * @param value 数据 * @throws IllegalAccessException */ private static void setFieldValue(Field field, Object objInstance, String value) throws IllegalAccessException { String fieldType = field.getType().getName();// 取字段的数据类型 field.setAccessible(true); try { if (fieldType.equals("java.lang.String")) { field.set(objInstance, value); } else if (fieldType.equals("java.lang.Integer") || fieldType.equals("int")) { field.set(objInstance, Integer.valueOf(value)); } else if (fieldType.equals("java.lang.Long") || fieldType.equals("long")) { field.set(objInstance, Long.valueOf(value)); } else if (fieldType.equals("java.lang.Float") || fieldType.equals("float")) { field.set(objInstance, Float.valueOf(value)); } else if (fieldType.equals("java.lang.Double") || fieldType.equals("double")) { field.set(objInstance, Double.valueOf(value)); } else if (fieldType.equals("java.math.BigDecimal")) { field.set(objInstance, new BigDecimal(value)); } else if (fieldType.equals("java.util.Date")) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); formatter.setLenient(false); field.set(objInstance, formatter.parse(value)); } else if (fieldType.equals("java.sql.Date")) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); formatter.setLenient(false); Date date = formatter.parse(value); field.set(objInstance, new java.sql.Date(date.getTime())); } else if (fieldType.equals("java.lang.Boolean") || fieldType.equals("boolean")) { field.set(objInstance, Boolean.valueOf(value)); } else if (fieldType.equals("java.lang.Byte") || fieldType.equals("byte")) { field.set(objInstance, Byte.valueOf(value)); } else if (fieldType.equals("java.lang.Short") || fieldType.equals("short")) { field.set(objInstance, Short.valueOf(value)); } } catch (NumberFormatException ex) { // field.set(objInstance, null); 当使用简单数据类型会抛出异常 log.error(ex.getMessage(), ex); } catch (ParseException e) { log.error(e.getMessage(), e); field.set(objInstance, null); } catch (Exception e) { log.error(e.getMessage(), e); field.set(objInstance, null); } } }
import java.beans.PropertyDescriptor; import java.text.SimpleDateFormat; import java.util.Collection; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; /** * <strong>复制处理类</strong> */ public class CopyUtil { private static final Logger log = Logger.getLogger(CopyUtil.class.getName()); /** * 复制orig属性值赋值给dest * <p> * 满足如下条件时进行复制处理: * (1) dest与orig的属性名称相同; * (2) dest与orig的属性类型相同; * (3) dest的属性类型不为Class; * (4) orig属性类型不是Collection或者不是Collection的超类或接口; * </p> * * @param dest 目标对象 * @param orig 源对象 * @return 如果dest或者orig为null则返回null/如果发生异常返回null/否则返回复制填充后的dest */ public static Object copyProperties(Object dest, Object orig) { if (dest == null || orig == null) { return dest; } PropertyDescriptor[] destDesc = PropertyUtils.getPropertyDescriptors(dest); try { for (int i = 0; i < destDesc.length; i++) { Class destType = destDesc[i].getPropertyType(); Class origType = PropertyUtils.getPropertyType(orig, destDesc[i].getName()); if (destType != null && destType.equals(origType) && !destType.equals(Class.class)) { if (!Collection.class.isAssignableFrom(origType)) { try { Object value = PropertyUtils.getProperty(orig, destDesc[i].getName()); PropertyUtils.setProperty(dest, destDesc[i].getName(), value); } catch (Exception ex) { log.error("copyProperties(Object dest, Object orig)循环中异常。", ex); } } } } return dest; } catch (Exception ex) { log.error("copyProperties(Object dest, Object orig)异常。", ex); return null; } } /** * 复制orig属性值赋值给dest * <p> * 除了将String的值转换为java.util.Date的处理外,其他处理方式同copyProperties(Object dest, Object orig)。 * 最常用在将页面的查询条件(Form)转换为DTO进行数据库查询的处理。 * </p> * * @param dest 目标对象 * @param orig 源对象 * @return 如果dest或者orig为null则返回null/如果发生异常返回null/否则返回复制填充后的dest */ public static Object copyPropertiesSpecialOfStringToDate(Object dest, Object orig) { if (dest == null || orig == null) { return dest; } PropertyDescriptor[] destDesc = PropertyUtils.getPropertyDescriptors(dest); try { for (int i = 0; i < destDesc.length; i++) { Class destType = destDesc[i].getPropertyType(); Class origType = PropertyUtils.getPropertyType(orig, destDesc[i].getName()); if (destType != null && origType != null && !destType.equals(Class.class)) { if (origType.equals(destType)) { if (!Collection.class.isAssignableFrom(origType)) { try { Object valueOrig = PropertyUtils.getProperty(orig, destDesc[i].getName()); PropertyUtils.setProperty(dest, destDesc[i].getName(), valueOrig); } catch (Exception ex) { log.error("copyPropertiesSpecialOfStringToDate循环中异常-1。", ex); PropertyUtils.setProperty(dest, destDesc[i].getName(), null); } } } else if (destType.equals(java.util.Date.class) && origType.equals(String.class)) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); try { String valueOrig_string = (String) PropertyUtils.getProperty(orig, destDesc[i].getName()); if (valueOrig_string != null && valueOrig_string.trim().length() > 0) { PropertyUtils.setProperty(dest, destDesc[i].getName(), format.parse(valueOrig_string)); } else { PropertyUtils.setProperty(dest, destDesc[i].getName(), null); } } catch (Exception e) { log.error("copyPropertiesSpecialOfStringToDate循环中异常-2。", e); PropertyUtils.setProperty(dest, destDesc[i].getName(), null); } } } } return dest; } catch (Exception e) { log.error("copyPropertiesSpecialOfStringToDate异常。", e); return null; } } /** * 复制orig中指定的属性值赋值给dest * <p> * 除了指定属性名称数组外,其他处理方式同copyProperties(Object dest, Object orig)。 * </p> * * @param dest * @param orig * @param ignores * @return */ public static Object copyProperties(Object dest, Object orig, String[] ignores) { if (dest == null || orig == null) { return dest; } PropertyDescriptor[] destDesc = PropertyUtils.getPropertyDescriptors(dest); try { for (int i = 0; i < destDesc.length; i++) { if (contains(ignores, destDesc[i].getName())) { continue; } Class destType = destDesc[i].getPropertyType(); Class origType = PropertyUtils.getPropertyType(orig, destDesc[i].getName()); if (destType != null && destType.equals(origType) && !destType.equals(Class.class)) { if (!Collection.class.isAssignableFrom(origType)) { Object value = PropertyUtils.getProperty(orig, destDesc[i].getName()); PropertyUtils.setProperty(dest, destDesc[i].getName(), value); } } } return dest; } catch (Exception ex) { return null; } } /** * 属性名称数组中是否存在指定的属性 * * @param ignores 属性名称数组 * @param name 指定的属性名称 * @return 如果存在则返回true/否则返回false */ static boolean contains(String[] ignores, String name) { boolean ignored = false; for (int j = 0; ignores != null && j < ignores.length; j++) { if (ignores[j].equals(name)) { ignored = true; break; } } return ignored; } }
CopyUtil.copyProperties(userManagerDTO, initUserForm);
TaskDTO task = (TaskDTO) BeanUtil.fillBean(TaskDTO.class, request);
发表评论
-
Struts 注意问题
2010-01-18 17:40 9011-- struts form extend ... -
logic:present 和 logic:empty
2009-12-02 20:10 1906logic:empty和logic:notEmpty log ... -
BodyTagSupport,包括SKIP_PAGE, EVAL_PAGE等
2009-12-02 20:06 3150EVAL_BODY_INCLUDE:把Body读 ... -
Struts1中action线程安全问题
2009-11-18 14:52 3267struts 1.x的一个安全性问题是值得注意的。因为过去的 ... -
JSTL
2009-10-30 14:37 617<c:if test = "${fund0 ... -
html:error
2009-10-30 14:32 1178后台action error.add("erro ...
相关推荐
在Servlet中,我们可以使用`request.getParameter()`方法获取请求参数,然后通过Bean的setter方法将这些参数值设置到Bean中。在JSP中,我们可以通过以下方式实现自动属性填充: ```jsp *" /> ``` 这里的`...
在上述代码中,`mapping.findFormBean()`是根据配置文件中的form-bean元素查找ActionForm,而`request.getAttribute()`则是直接从请求对象中获取ActionForm。如果ActionForm已存在于request中,这两个方法都将返回...
在Spring框架中,Bean装配是指Spring容器将应用程序中的对象进行实例化、配置以及组装的过程。这涉及到依赖注入的概念,即容器负责将依赖关系注入到对象中,而不需要对象自己去创建或者查找这些依赖关系。 首先,...
4. 创建BeanForm的实例,并使用`MyArrayList`中的数据来填充Bean的属性。这可以通过反射API完成,也可以根据Bean的属性名直接设置值。 5. 最后,使用填充好的BeanForm对象进行业务逻辑处理,如数据库操作。 总的来...
Controller可以创建并填充Model对象,这个Model对象就是一组Bean的集合,然后将Model传递给View(通常是JSP页面)。在View中,可以使用Spring的Thymeleaf或其他模板引擎来方便地访问和显示Bean的属性。 总的来说,...
Java Bean在IT行业中被广泛用于封装业务逻辑和数据,它为Java Server Pages(JSP)提供了数据模型。在本主题“java + bean 分页技术”中,我们将深入探讨如何利用Java Bean实现高效的分页功能,这在处理大量数据时...
Struts 中数据在 Action 与 JSP 中的传递总结 Struts 框架中,数据在 Action 与 JSP 之间...所以这时候,JSP 页面 <html:text> 在这个本来该是 FormBean 的假 Bean 中找到了合适的匹配对象,从而歪打正着的成功显示。
这样,Spring会自动将请求参数值填充到Bean对象中。 4. **使用@ModelAttribute注解** 对于POST请求,`@ModelAttribute`注解可以用来将请求的FORM表单数据绑定到一个对象上,该对象通常是Bean: ```java @...
3. **属性注入**:Spring使用依赖注入(Dependency Injection,DI)填充Bean对象的属性。 4. **调用Aware接口**:如果Bean实现了如BeanNameAware、ApplicationContextAware等接口,Spring会回调这些接口的方法。 5. ...
在方法参数前加上此注解,Spring MVC会尝试从请求中获取数据填充模型对象。 7. `@ResponseBody`:这个注解告诉Spring MVC,方法的返回值应直接写入HTTP响应体,而不是寻找一个视图进行渲染。通常用于返回JSON或XML...
`request.getParameter()`方法用于读取POST请求中的数据。 6. **数据库操作** 身为一个登录系统,通常需要与数据库交互来验证用户凭证。这通常涉及SQL查询,如SELECT语句,用于查找匹配的用户名和密码。数据库连接...
8. `@ModelAttribute`:用于从请求参数或模型中获取或填充数据到一个对象。在表单提交场景中,它能方便地将表单数据绑定到一个Java Bean。 9. `@SessionAttributes`:标记需要存储在HTTP Session中的属性。这些属性...
此段代码首先从`HttpServletRequest`对象中获取参数名称,并将参数名称和对应的值存储在一个`HashMap`中。然后,调用`BeanUtils.populate()`方法将这些值填充到Bean中。`BeanUtils`内部会调用`Converter`来处理类型...
如果Action执行后没有正确地将数据放入request域,那么在JSP页面中尝试通过`request.getAttribute()`获取数据时就会出现问题。 - **解决方案:** - 确保Action中的数据已经通过`request.setAttribute()`正确设置...
Spring bean是存储在Spring IoC容器中的Java对象,可以通过容器来配置和管理。 18、spring提供了哪些配置方式? Spring提供了以下配置方式: - 基于XML的配置 - 基于注解的配置 - 基于Java类的配置 19、spring支持...
这是因为SpringMVC会根据这些名字匹配并自动填充Bean的属性。 3. **Bean绑定**:`@ModelAttribute`注解用于在请求处理方法中创建或查找一个Bean,并将请求参数绑定到Bean的属性上。例如,如果你有一个名为`User`的...
// 现在,user对象已经被填充了前端传递的值 } ``` BeanUtils的`copyProperties()`方法会遍历请求参数,尝试找到与Java Bean属性匹配的方法(setter方法),然后调用这些方法将值注入到对应的属性中。这个过程就是...
例如,我们可以创建一个UserBean类,然后直接用`BeanUtils.populate()`方法将请求参数填充到这个bean中: ```java UserBean user = new UserBean(); try { ServletRequest request = ...; // 获取请求对象 ...