欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

利用request实现页面与Bean的属性绑定,requestbean,封装JSP页面数据的获取

来源: javaer 分享于  点击 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;/** * &#693;&#65533;&#65533;&#1203;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1328;&#65533; * @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 &#65533;&#65533;&#65533;&#65533; declaredField&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1332;&#65533;                    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);        }    }    /**     * &#65533;&#65533; getter &#65533;л&#65533;&#545;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @param methodName getter     * @return &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     */    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;    }    /**     * &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1254;&#65533;&#65533;getter&#65533;&#65533;setter     *      * @param name     *            &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @param methodPrefix     *            "get" &#65533;&#65533;&#65533;&#65533; "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();    }    /**     * &#65533;&#65533;&#545;&#65533;&#246;&#65533;&#65533;&#65533;&#65533;&#1590;&#65533;&#65533;&#65533;&#65533;&#1333;&#65533;&#1461;     *      * @param object     *            &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @param attributeName     *            &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @return &#65533;&#65533;&#65533;&#65533;&#1461;     */    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 {                // &#251;&#65533;&#65533;get&#65533;&#65533;&#65533;&#65533;&#65533;&#315;&#65533;&#65533;&#65533;&#65533;&#883;&#65533;&#65533;&#65533;&#1211;&#65533;&#65533;is&#65533;&#65533;&#65533;&#65533;                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;    }    /**     * &#65533;&#65533;&#65533;&#248;&#246;&#65533;&#65533;&#65533;&#65533;&#1590;&#65533;&#65533;&#65533;&#65533;&#1333;&#65533;&#1461;     *      * @param object     *            &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @param attributeName     *            &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;     * @param attributeValue     *            &#65533;&#65533;&#65533;&#65533;&#1461;     */    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
相关栏目:

用户点评