⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beanutilsbean.java

📁 apache beanutils开源项目源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    public String getProperty(Object bean, String name)            throws IllegalAccessException, InvocationTargetException,            NoSuchMethodException {        return (getNestedProperty(bean, name));    }    /**     * Return the value of the specified simple property of the specified     * bean, converted to a String.     *     * @param bean Bean whose property is to be extracted     * @param name Name of the property to be extracted     *     * @exception IllegalAccessException if the caller does not have     *  access to the property accessor method     * @exception InvocationTargetException if the property accessor method     *  throws an exception     * @exception NoSuchMethodException if an accessor method for this     *  property cannot be found     */    public String getSimpleProperty(Object bean, String name)            throws IllegalAccessException, InvocationTargetException,            NoSuchMethodException {        Object value = getPropertyUtils().getSimpleProperty(bean, name);        return (getConvertUtils().convert(value));    }    /**     * <p>Populate the JavaBeans properties of the specified bean, based on     * the specified name/value pairs.  This method uses Java reflection APIs     * to identify corresponding "property setter" method names, and deals     * with setter arguments of type <code>String</code>, <code>boolean</code>,     * <code>int</code>, <code>long</code>, <code>float</code>, and     * <code>double</code>.  In addition, array setters for these types (or the     * corresponding primitive types) can also be identified.</p>     *      * <p>The particular setter method to be called for each property is     * determined using the usual JavaBeans introspection mechanisms.  Thus,     * you may identify custom setter methods using a BeanInfo class that is     * associated with the class of the bean itself.  If no such BeanInfo     * class is available, the standard method name conversion ("set" plus     * the capitalized name of the property in question) is used.</p>     *      * <p><strong>NOTE</strong>:  It is contrary to the JavaBeans Specification     * to have more than one setter method (with different argument     * signatures) for the same property.</p>     *     * <p><strong>WARNING</strong> - The logic of this method is customized     * for extracting String-based request parameters from an HTTP request.     * It is probably not what you want for general property copying with     * type conversion.  For that purpose, check out the     * <code>copyProperties()</code> method instead.</p>     *     * @param bean JavaBean whose properties are being populated     * @param properties Map keyed by property name, with the     *  corresponding (String or String[]) value(s) to be set     *     * @exception IllegalAccessException if the caller does not have     *  access to the property accessor method     * @exception InvocationTargetException if the property accessor method     *  throws an exception     */    public void populate(Object bean, Map properties)        throws IllegalAccessException, InvocationTargetException {        // Do nothing unless both arguments have been specified        if ((bean == null) || (properties == null)) {            return;        }        if (log.isDebugEnabled()) {            log.debug("BeanUtils.populate(" + bean + ", " +                    properties + ")");        }        // Loop through the property name/value pairs to be set        Iterator names = properties.keySet().iterator();        while (names.hasNext()) {            // Identify the property name and value(s) to be assigned            String name = (String) names.next();            if (name == null) {                continue;            }            Object value = properties.get(name);            // Perform the assignment for this property            setProperty(bean, name, value);        }    }    /**     * <p>Set the specified property value, performing type conversions as     * required to conform to the type of the destination property.</p>     *     * <p>If the property is read only then the method returns      * without throwing an exception.</p>     *     * <p>If <code>null</code> is passed into a property expecting a primitive value,     * then this will be converted as if it were a <code>null</code> string.</p>     *     * <p><strong>WARNING</strong> - The logic of this method is customized     * to meet the needs of <code>populate()</code>, and is probably not what     * you want for general property copying with type conversion.  For that     * purpose, check out the <code>copyProperty()</code> method instead.</p>     *     * <p><strong>WARNING</strong> - PLEASE do not modify the behavior of this     * method without consulting with the Struts developer community.  There     * are some subtleties to its functionality that are not documented in the     * Javadoc description above, yet are vital to the way that Struts utilizes     * this method.</p>     *     * @param bean Bean on which setting is to be performed     * @param name Property name (can be nested/indexed/mapped/combo)     * @param value Value to be set     *     * @exception IllegalAccessException if the caller does not have     *  access to the property accessor method     * @exception InvocationTargetException if the property accessor method     *  throws an exception     */    public void setProperty(Object bean, String name, Object value)        throws IllegalAccessException, InvocationTargetException {        // Trace logging (if enabled)        if (log.isTraceEnabled()) {            StringBuffer sb = new StringBuffer("  setProperty(");            sb.append(bean);            sb.append(", ");            sb.append(name);            sb.append(", ");            if (value == null) {                sb.append("<NULL>");            } else if (value instanceof String) {                sb.append((String) value);            } else if (value instanceof String[]) {                String values[] = (String[]) value;                sb.append('[');                for (int i = 0; i < values.length; i++) {                    if (i > 0) {                        sb.append(',');                    }                    sb.append(values[i]);                }                sb.append(']');            } else {                sb.append(value.toString());            }            sb.append(')');            log.trace(sb.toString());        }        // Resolve any nested expression to get the actual target bean        Object target = bean;        int delim = findLastNestedIndex(name);        if (delim >= 0) {            try {                target =                    getPropertyUtils().getProperty(bean, name.substring(0, delim));            } catch (NoSuchMethodException e) {                return; // Skip this property setter            }            name = name.substring(delim + 1);            if (log.isTraceEnabled()) {                log.trace("    Target bean = " + target);                log.trace("    Target name = " + name);            }        }        // Declare local variables we will require        String propName = null;          // Simple name of target property        Class type = null;               // Java type of target property        int index = -1;                  // Indexed subscript value (if any)        String key = null;               // Mapped key value (if any)        // Calculate the property name, index, and key values        propName = name;        int i = propName.indexOf(PropertyUtils.INDEXED_DELIM);        if (i >= 0) {            int k = propName.indexOf(PropertyUtils.INDEXED_DELIM2);            try {                index =                    Integer.parseInt(propName.substring(i + 1, k));            } catch (NumberFormatException e) {                ;            }            propName = propName.substring(0, i);        }        int j = propName.indexOf(PropertyUtils.MAPPED_DELIM);        if (j >= 0) {            int k = propName.indexOf(PropertyUtils.MAPPED_DELIM2);            try {                key = propName.substring(j + 1, k);            } catch (IndexOutOfBoundsException e) {                ;            }            propName = propName.substring(0, j);        }        // Calculate the property type        if (target instanceof DynaBean) {            DynaClass dynaClass = ((DynaBean) target).getDynaClass();            DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);            if (dynaProperty == null) {                return; // Skip this property setter            }            type = dynaProperty.getType();        } else {            PropertyDescriptor descriptor = null;            try {                descriptor =                    getPropertyUtils().getPropertyDescriptor(target, name);                if (descriptor == null) {                    return; // Skip this property setter                }            } catch (NoSuchMethodException e) {                return; // Skip this property setter            }            if (descriptor instanceof MappedPropertyDescriptor) {                if (((MappedPropertyDescriptor) descriptor).getMappedWriteMethod() == null) {                    if (log.isDebugEnabled()) {                        log.debug("Skipping read-only property");                    }                    return; // Read-only, skip this property setter                }                type = ((MappedPropertyDescriptor) descriptor).                    getMappedPropertyType();            } else if (descriptor instanceof IndexedPropertyDescriptor) {                if (((IndexedPropertyDescriptor) descriptor).getIndexedWriteMethod() == null) {                    if (log.isDebugEnabled()) {                        log.debug("Skipping read-only property");                    }                    return; // Read-only, skip this property setter                }                type = ((IndexedPropertyDescriptor) descriptor).                    getIndexedPropertyType();            } else {                if (descriptor.getWriteMethod() == null) {                    if (log.isDebugEnabled()) {                        log.debug("Skipping read-only property");                    }                    return; // Read-only, skip this property setter                }                type = descriptor.getPropertyType();            }        }        // Convert the specified value to the required type        Object newValue = null;        if (type.isArray() && (index < 0)) { // Scalar value into array            if (value == null) {                String values[] = new String[1];                values[0] = (String) value;                newValue = getConvertUtils().convert((String[]) values, type);            } else if (value instanceof String) {                String values[] = new String[1];                values[0] = (String) value;                newValue = getConvertUtils().convert((String[]) values, type);            } else if (value instanceof String[]) {                newValue = getConvertUtils().convert((String[]) value, type);            } else {                newValue = value;            }        } else if (type.isArray()) {         // Indexed value into array            if (value instanceof String) {                newValue = getConvertUtils().convert((String) value,                                                type.getComponentType());            } else if (value instanceof String[]) {                newValue = getConvertUtils().convert(((String[]) value)[0],                                                type.getComponentType());            } else {                newValue = value;            }        } else {                             // Value into scalar            if ((value instanceof String) || (value == null)) {                newValue = getConvertUtils().convert((String) value, type);            } else if (value instanceof String[]) {                newValue = getConvertUtils().convert(((String[]) value)[0],                                                type);            } else if (getConvertUtils().lookup(value.getClass()) != null) {                newValue = getConvertUtils().convert(value.toString(), type);            } else {                newValue = value;            }        }        // Invoke the setter method        try {            if (index >= 0) {                getPropertyUtils().setIndexedProperty(target, propName,                                                 index, newValue);            } else if (key != null) {                getPropertyUtils().setMappedProperty(target, propName,                                                key, newValue);            } else {                getPropertyUtils().setProperty(target, propName, newValue);            }        } catch (NoSuchMethodException e) {            throw new InvocationTargetException                (e, "Cannot set " + propName);        }    }        private int findLastNestedIndex(String expression)    {        // walk back from the end to the start         // and find the first index that         int bracketCount = 0;        for (int i = expression.length() - 1; i>=0 ; i--) {            char at = expression.charAt(i);            switch (at) {                case PropertyUtils.NESTED_DELIM:                    if (bracketCount < 1) {                        return i;                    }                    break;                                    case PropertyUtils.MAPPED_DELIM:                case PropertyUtils.INDEXED_DELIM:                    // not bothered which                    --bracketCount;                    break;                                case PropertyUtils.MAPPED_DELIM2:                case PropertyUtils.INDEXED_DELIM2:                    // not bothered which                    ++bracketCount;                    break;                        }        }        // can't find any        return -1;    }        /**      * Gets the <code>ConvertUtilsBean</code> instance used to perform the conversions.     */    public ConvertUtilsBean getConvertUtils() {        return convertUtilsBean;    }        /**     * Gets the <code>PropertyUtilsBean</code> instance used to access properties.     */    public PropertyUtilsBean getPropertyUtils() {        return propertyUtilsBean;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -