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

📄 formbeanconfig.java.svn-base

📁 MVC开源框架
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
            FormPropertyConfig[] props = findFormPropertyConfigs();            for (int i = 0; i < props.length; i++) {                dynaClass.add(props[i].getName(), props[i].getTypeClass());                dynaBean.set(props[i].getName(), props[i].initial());            }            dynaClass.setRestricted(isRestricted());        }        if (form instanceof BeanValidatorForm) {            ((BeanValidatorForm)form).initialize(this);        }        return form;    }    /**     * <p>Create and return an <code>ActionForm</code> instance appropriate to     * the information in this <code>FormBeanConfig</code>.</p>     * <p><b>NOTE:</b> If the given <code>ActionContext</code> is not of type     * <code>ServletActionContext</code> (or a subclass), then the form which     * is returned will have a null <code>servlet</code> property.  Some of     * the subclasses of <code>ActionForm</code> included in Struts will later     * throw a <code>NullPointerException</code> in this case. </p> <p>TODO:     * Find a way to control this direct dependency on the Servlet API.</p>     *     * @param context The ActionContext.     * @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(ActionContext context)        throws IllegalAccessException, InstantiationException {        ActionServlet actionServlet = null;        if (context instanceof ServletActionContext) {            ServletActionContext saContext = (ServletActionContext) context;            actionServlet = saContext.getActionServlet();        }        return createActionForm(actionServlet);    }    /**     * <p>Checks if the given <code>ActionForm</code> instance is suitable for     * use as an alternative to calling this <code>FormBeanConfig</code>     * instance's <code>createActionForm</code> method.</p>     *     * @param form an existing form instance that may be reused.     * @return true if the given form can be reused as the form for this     *         config.     */    public boolean canReuse(ActionForm form) {        if (form != null) {            if (this.getDynamic()) {                String className = ((DynaBean) form).getDynaClass().getName();                if (className.equals(this.getName())) {                    log.debug("Can reuse existing instance (dynamic)");                    return (true);                }            } else {                try {                    // check if the form's class is compatible with the class                    //      we're configured for                    Class formClass = form.getClass();                    if (form instanceof BeanValidatorForm) {                        BeanValidatorForm beanValidatorForm =                            (BeanValidatorForm) form;                        if (beanValidatorForm.getInstance() instanceof DynaBean) {                            String formName = beanValidatorForm.getStrutsConfigFormName();                            if (getName().equals(formName)) {                                log.debug("Can reuse existing instance (BeanValidatorForm)");                                return true;                            } else {                                return false;                            }                        }                        formClass = beanValidatorForm.getInstance().getClass();                    }                    Class configClass =                        ClassUtils.getApplicationClass(this.getType());                    if (configClass.isAssignableFrom(formClass)) {                        log.debug("Can reuse existing instance (non-dynamic)");                        return (true);                    }                } catch (Exception e) {                    log.debug("Error testing existing instance for reusability; just create a new instance",                        e);                }            }        }        return false;    }    /**     * Add a new <code>FormPropertyConfig</code> instance to the set     * associated with this module.     *     * @param config The new configuration instance to be added     * @throws IllegalArgumentException if this property name has already been     *                                  defined     */    public void addFormPropertyConfig(FormPropertyConfig config) {        throwIfConfigured();        if (formProperties.containsKey(config.getName())) {            throw new IllegalArgumentException("Property " + config.getName()                + " already defined");        }        formProperties.put(config.getName(), config);    }    /**     * Return the form property configuration for the specified property name,     * if any; otherwise return <code>null</code>.     *     * @param name Form property name to find a configuration for     */    public FormPropertyConfig findFormPropertyConfig(String name) {        return ((FormPropertyConfig) formProperties.get(name));    }    /**     * Return the form property configurations for this module.  If there are     * none, a zero-length array is returned.     */    public FormPropertyConfig[] findFormPropertyConfigs() {        FormPropertyConfig[] results =            new FormPropertyConfig[formProperties.size()];        return ((FormPropertyConfig[]) formProperties.values().toArray(results));    }    /**     * Freeze the configuration of this component.     */    public void freeze() {        super.freeze();        FormPropertyConfig[] fpconfigs = findFormPropertyConfigs();        for (int i = 0; i < fpconfigs.length; i++) {            fpconfigs[i].freeze();        }    }    /**     * <p>Inherit values that have not been overridden from the provided     * config object.  Subclasses overriding this method should verify that     * the given parameter is of a class that contains a property it is trying     * to inherit:</p>     *     * <pre>     * if (config instanceof MyCustomConfig) {     *     MyCustomConfig myConfig =     *         (MyCustomConfig) config;     *     *     if (getMyCustomProp() == null) {     *         setMyCustomProp(myConfig.getMyCustomProp());     *     }     * }     * </pre>     *     * <p>If the given <code>config</code> is extending another object, those     * extensions should be resolved before it's used as a parameter to this     * method.</p>     *     * @param config The object that this instance will be inheriting its     *               values from.     * @see #processExtends(ModuleConfig)     */    public void inheritFrom(FormBeanConfig config)        throws ClassNotFoundException, IllegalAccessException,            InstantiationException, InvocationTargetException {        throwIfConfigured();        // Inherit values that have not been overridden        if (getName() == null) {            setName(config.getName());        }        if (!isRestricted()) {            setRestricted(config.isRestricted());        }        if (getType() == null) {            setType(config.getType());        }        inheritFormProperties(config);        inheritProperties(config);    }    /**     * <p>Inherit configuration information from the FormBeanConfig that this     * instance is extending.  This method verifies that any form bean config     * object that it inherits from has also had its processExtends() method     * called.</p>     *     * @param moduleConfig The {@link ModuleConfig} that this bean is from.     * @see #inheritFrom(FormBeanConfig)     */    public void processExtends(ModuleConfig moduleConfig)        throws ClassNotFoundException, IllegalAccessException,            InstantiationException, InvocationTargetException {        if (configured) {            throw new IllegalStateException("Configuration is frozen");        }        String ancestor = getExtends();        if ((!extensionProcessed) && (ancestor != null)) {            FormBeanConfig baseConfig =                moduleConfig.findFormBeanConfig(ancestor);            if (baseConfig == null) {                throw new NullPointerException("Unable to find "                    + "form bean '" + ancestor + "' to extend.");            }            // Check against circule inheritance and make sure the base config's            //  own extends have been processed already            if (checkCircularInheritance(moduleConfig)) {                throw new IllegalArgumentException(                    "Circular inheritance detected for form bean " + getName());            }            // Make sure the ancestor's own extension has been processed.            if (!baseConfig.isExtensionProcessed()) {                baseConfig.processExtends(moduleConfig);            }            // Copy values from the base config            inheritFrom(baseConfig);        }        extensionProcessed = true;    }    /**     * Remove the specified form property configuration instance.     *     * @param config FormPropertyConfig instance to be removed     */    public void removeFormPropertyConfig(FormPropertyConfig config) {        if (configured) {            throw new IllegalStateException("Configuration is frozen");        }        formProperties.remove(config.getName());    }    /**     * Return a String representation of this object.     */    public String toString() {        StringBuffer sb = new StringBuffer("FormBeanConfig[");        sb.append("name=");        sb.append(this.name);        sb.append(",type=");        sb.append(this.type);        sb.append(",extends=");        sb.append(this.inherit);        sb.append("]");        return (sb.toString());    }    // ------------------------------------------------------ Protected Methods    /**     * Return the <code>Class</code> instance for the form bean implementation     * configured by this <code>FormBeanConfig</code> instance.  This method     * uses the same algorithm as <code>RequestUtils.applicationClass()</code>     * but is reproduced to avoid a runtime dependence.     */    protected Class formBeanClass() {        ClassLoader classLoader =            Thread.currentThread().getContextClassLoader();        if (classLoader == null) {            classLoader = this.getClass().getClassLoader();        }        try {            return (classLoader.loadClass(getType()));        } catch (Exception e) {            return (null);        }    }}

⌨️ 快捷键说明

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