利用request实现页面与Bean的属性绑定,requestbean,封装JSP页面数据的获取
分享于 点击 20365 次 点评:185
利用request实现页面与Bean的属性绑定,requestbean,封装JSP页面数据的获取
封装JSP页面数据的获取和初始化工作,数据获取封装了 request.getParameter() 方法,并设置到Bean里;数据初始化封装了request.setAttribute() 方法,在页面可以使用EL表达式获取;
另外有一个是类型转换工具,简单模仿了struts2的而已,只提供String类型与基本类型的互换;
没有详细测试过,欢迎拍砖 :)
package mvc;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Enumeration;import javax.servlet.ServletRequest;/** * ʵ��ҳ�����������԰� * @author zhouyufa * */public final class DataBinding { private DataBinding() { } public static void toView(ServletRequest request, Object object) { Method[] methods = object.getClass().getMethods(); String methodName = null; String field = null; Object fieldValue = null; Class<?> fieldType = null; for (Method method : methods) { methodName = method.getName(); field = null; field = DataBinding.generateFieldName(methodName); if(field.length() <= 0) { continue; } try { if(field.equals("class")) { // class ���� declaredField�������Դ� request.setAttribute(field, method.invoke(object)); System.out.println(field + " = " + request.getAttribute(field)); continue; } fieldType = object.getClass().getDeclaredField(field).getType(); if(fieldType == java.util.Map.class) { fieldValue = method.invoke(object); } else { fieldValue = TypeConvertor.convert(fieldType, method.invoke(object)); } request.setAttribute(field, fieldValue); System.out.println(field + " = " + request.getAttribute(field)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } } public static void fromView(ServletRequest request, Object object) { Enumeration<?> names = request.getParameterNames(); String name = null; String value = null; while (names.hasMoreElements()) { name = (String) names.nextElement(); value = request.getParameter(name); DataBinding.setAttribute(object, name, value); } } /** * �� getter �л�ȡ������ * @param methodName getter * @return ������ */ public static String generateFieldName(String methodName) { String field = null; if (methodName.startsWith("get")) { field = methodName.substring(3); } else if (methodName.startsWith("is")) { field = methodName.substring(2); } if(field == null) { return ""; } field = field.substring(0, 1).toLowerCase() + field.substring(1); return field; } /** * �����������Ӧ��getter��setter * * @param name * ������� * @param methodPrefix * "get" ���� "set" * @return method name of getter or setter */ public static String generateMethodName(String name, String methodPrefix) { StringBuilder builder = new StringBuilder(methodPrefix); builder.append(name.substring(0, 1).toUpperCase()); builder.append(name.substring(1)); return builder.toString(); } /** * ��ȡ�ö����ض����Ե�ֵ * * @param object * �������� * @param attributeName * ������� * @return ����ֵ */ public static Object getAttribute(Object object, String attributeName) { try { String methodName = DataBinding.generateMethodName(attributeName, "get"); Method method = object.getClass().getMethod(methodName); return method.invoke(object); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); try { // û��get�����Ļ����ͳ���һ��is���� String methodName = DataBinding.generateMethodName( attributeName, "is"); Method method = object.getClass().getMethod(methodName); return method.invoke(object); } catch (SecurityException ex) { ex.printStackTrace(); } catch (NoSuchMethodException ex) { ex.printStackTrace(); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } catch (InvocationTargetException ex) { ex.printStackTrace(); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; } /** * ���øö����ض����Ե�ֵ * * @param object * �������� * @param attributeName * ������� * @param attributeValue * ����ֵ */ public static void setAttribute(Object object, String attributeName, String attributeValue) { try { String methodName = DataBinding.generateMethodName(attributeName, "set"); Field field = object.getClass().getDeclaredField(attributeName); System.out.println(attributeName + " : " + field.getType()); Method method = object.getClass().getMethod(methodName, field.getType()); Object o = TypeConvertor.convert(attributeValue, field.getType()); if (o != null) { method.invoke(object, o); } else { method.invoke(object, attributeValue); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } }}//该片段来自于http://byrx.net
用户点评