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

📄 formbeanconfig.java.svn-base

📁 MVC开源框架
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/* * $Id$ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements.  See the NOTICE file * distributed with this work for additional information * regarding copyright ownership.  The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License.  You may obtain a copy of the License at * *  http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied.  See the License for the * specific language governing permissions and limitations * under the License. */package org.apache.struts.config;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.DynaBean;import org.apache.commons.beanutils.MutableDynaClass;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionServlet;import org.apache.struts.action.DynaActionForm;import org.apache.struts.action.DynaActionFormClass;import org.apache.struts.chain.commands.util.ClassUtils;import org.apache.struts.chain.contexts.ActionContext;import org.apache.struts.chain.contexts.ServletActionContext;import org.apache.struts.util.RequestUtils;import org.apache.struts.validator.BeanValidatorForm;import java.lang.reflect.InvocationTargetException;import java.util.HashMap;/** * <p>A JavaBean representing the configuration information of a * <code>&lt;form-bean&gt;</code> element in a Struts configuration file.<p> * * @version $Rev$ $Date: 2006-01-17 07:26:20 -0500 (Tue, 17 Jan 2006) *          $ * @since Struts 1.1 */public class FormBeanConfig extends BaseConfig {    private static final Log log = LogFactory.getLog(FormBeanConfig.class);    // ----------------------------------------------------- Instance Variables    /**     * The set of FormProperty elements defining dynamic form properties for     * this form bean, keyed by property name.     */    protected HashMap formProperties = new HashMap();    /**     * <p>The lockable object we can synchronize on when creating     * DynaActionFormClass.</p>     */    protected String lock = "";    // ------------------------------------------------------------- Properties    /**     * The DynaActionFormClass associated with a DynaActionForm.     */    protected transient DynaActionFormClass dynaActionFormClass;    /**     * Is the form bean class an instance of DynaActionForm with dynamic     * properties?     */    protected boolean dynamic = false;    /**     * The name of the FormBeanConfig that this config inherits configuration     * information from.     */    protected String inherit = null;    /**     * Have the inheritance values for this class been applied?     */    protected boolean extensionProcessed = false;    /**     * The unique identifier of this form bean, which is used to reference     * this bean in <code>ActionMapping</code> instances as well as for the     * name of the request or session attribute under which the corresponding     * form bean instance is created or accessed.     */    protected String name = null;    /**     * The fully qualified Java class name of the implementation class to be     * used or generated.     */    protected String type = null;    /**     * Is this DynaClass currently restricted (for DynaBeans with a     * MutableDynaClass).     */    protected boolean restricted = false;    /**     * <p>Return the DynaActionFormClass associated with a     * DynaActionForm.</p>     *     * @throws IllegalArgumentException if the ActionForm is not dynamic     */    public DynaActionFormClass getDynaActionFormClass() {        if (dynamic == false) {            throw new IllegalArgumentException("ActionForm is not dynamic");        }        synchronized (lock) {            if (dynaActionFormClass == null) {                dynaActionFormClass = new DynaActionFormClass(this);            }        }        return dynaActionFormClass;    }    public boolean getDynamic() {        return (this.dynamic);    }    public String getExtends() {        return (this.inherit);    }    public void setExtends(String extend) {        throwIfConfigured();        this.inherit = extend;    }    public boolean isExtensionProcessed() {        return extensionProcessed;    }    public String getName() {        return (this.name);    }    public void setName(String name) {        throwIfConfigured();        this.name = name;    }    public String getType() {        return (this.type);    }    public void setType(String type) {        throwIfConfigured();        this.type = type;        Class dynaBeanClass = DynaActionForm.class;        Class formBeanClass = formBeanClass();        if (formBeanClass != null) {            if (dynaBeanClass.isAssignableFrom(formBeanClass)) {                this.dynamic = true;            } else {                this.dynamic = false;            }        } else {            this.dynamic = false;        }    }    /**     * <p>Indicates whether a MutableDynaClass is currently restricted.</p>     * <p>If so, no changes to the existing registration of property names,     * data types, readability, or writeability are allowed.</p>     */    public boolean isRestricted() {        return restricted;    }    /**     * <p>Set whether a MutableDynaClass is currently restricted.</p> <p>If     * so, no changes to the existing registration of property names, data     * types, readability, or writeability are allowed.</p>     */    public void setRestricted(boolean restricted) {        this.restricted = restricted;    }    // ------------------------------------------------------ Protected Methods    /**     * <p>Traces the hierarchy of this object to check if any of the ancestors     * is extending this instance.</p>     *     * @param moduleConfig The configuration for the module being configured.     * @return true if circular inheritance was detected.     */    protected boolean checkCircularInheritance(ModuleConfig moduleConfig) {        String ancestorName = getExtends();        while (ancestorName != null) {            // check if we have the same name as an ancestor            if (getName().equals(ancestorName)) {                return true;            }            // get our ancestor's ancestor            FormBeanConfig ancestor =                moduleConfig.findFormBeanConfig(ancestorName);            ancestorName = ancestor.getExtends();        }        return false;    }    /**     * <p>Compare the form properties of this bean with that of the given and     * copy those that are not present.</p>     *     * @param config The form bean config to copy properties from.     * @see #inheritFrom(FormBeanConfig)     */    protected void inheritFormProperties(FormBeanConfig config)        throws ClassNotFoundException, IllegalAccessException,            InstantiationException, InvocationTargetException {        throwIfConfigured();        // Inherit form property configs        FormPropertyConfig[] baseFpcs = config.findFormPropertyConfigs();        for (int i = 0; i < baseFpcs.length; i++) {            FormPropertyConfig baseFpc = baseFpcs[i];            // Do we have this prop?            FormPropertyConfig prop =                this.findFormPropertyConfig(baseFpc.getName());            if (prop == null) {                // We don't have this, so let's copy it                prop =                    (FormPropertyConfig) RequestUtils.applicationInstance(baseFpc.getClass()                                                                                 .getName());                BeanUtils.copyProperties(prop, baseFpc);                this.addFormPropertyConfig(prop);                prop.setProperties(baseFpc.copyProperties());            }        }    }    // --------------------------------------------------------- Public Methods    /**     * <p>Create and return an <code>ActionForm</code> instance appropriate to     * the information in this <code>FormBeanConfig</code>.</p>     *     * <p>Although this method is not formally deprecated yet, where possible,     * the form which accepts an <code>ActionContext</code> as an argument is     * preferred, to help sever direct dependencies on the Servlet API.  As     * the ActionContext becomes more familiar in Struts, this method will     * almost certainly be deprecated.</p>     *     * @param servlet The action servlet     * @return ActionForm instance     * @throws IllegalAccessException if the Class or the appropriate     *                                constructor is not accessible     * @throws InstantiationException if this Class represents an abstract     *                                class, an array class, a primitive type,     *                                or void; or if instantiation fails for     *                                some other reason     */    public ActionForm createActionForm(ActionServlet servlet)        throws IllegalAccessException, InstantiationException {        Object obj = null;        // Create a new form bean instance        if (getDynamic()) {            obj = getDynaActionFormClass().newInstance();        } else {            obj = formBeanClass().newInstance();        }        ActionForm form = null;        if (obj instanceof ActionForm) {            form = (ActionForm) obj;        } else {            form = new BeanValidatorForm(obj);        }        form.setServlet(servlet);        if (form instanceof DynaBean            && ((DynaBean) form).getDynaClass() instanceof MutableDynaClass) {            DynaBean dynaBean = (DynaBean) form;            MutableDynaClass dynaClass =                (MutableDynaClass) dynaBean.getDynaClass();            // Add properties            dynaClass.setRestricted(false);

⌨️ 快捷键说明

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