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

📄 methodbindingpropertyeditor.java

📁 Please read your package and describe it at least 40 bytes in English. System will automatically de
💻 JAVA
字号:
/* * Copyright 2002-2004 the original author or authors. *  * Licensed 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 de.mindmatters.faces.el;import java.beans.PropertyEditorSupport;import javax.faces.FactoryFinder;import javax.faces.application.Application;import javax.faces.application.ApplicationFactory;import javax.faces.context.FacesContext;import javax.faces.el.MethodBinding;import javax.faces.el.ReferenceSyntaxException;import javax.faces.event.ActionEvent;import org.springframework.util.Assert;import de.mindmatters.faces.FacesUtils;/** * Editor for {@link MethodBinding}, to directly populate a MethodBinding * property. *  * @author Andreas Kuhrwahl *  */public class MethodBindingPropertyEditor extends PropertyEditorSupport {    /**     * MethodBinding that delegates to a binding created by the Application of     * the underlying JSF implementation.     *      * @author Andreas Kuhrwahl     *      */    private class DelegatingMethodBinding extends MethodBinding {        /** The reference. */        private final String ref;        /** The internal used method binding. */        private MethodBinding methodBinding;        /**         * Creates a MethodBinding based upon the given reference.         *          * @param ref         *            the reference         */        public DelegatingMethodBinding(final String ref) {            super();            this.ref = ref;        }        /**         * @return the internal used MethodBinding         */        private MethodBinding getMethodBinding() {            if (this.methodBinding == null) {                try {                    this.methodBinding = MethodBindingPropertyEditor.this.application                            .createMethodBinding(this.ref, null);                    Assert.isTrue(String.class.equals(this.methodBinding                            .getType(FacesContext.getCurrentInstance())));                } catch (Exception ex) {                    try {                        this.methodBinding = MethodBindingPropertyEditor.this.application                                .createMethodBinding(this.ref,                                        new Class[] { ActionEvent.class });                    } catch (Exception ex2) {                        throw new ReferenceSyntaxException(ex2);                    }                    if (!Void.class.equals(this.methodBinding                            .getType(FacesContext.getCurrentInstance()))) {                        throw new ReferenceSyntaxException("Method binding '"                                + this.methodBinding.getExpressionString()                                + "' not supported.");                    }                }            }            return this.methodBinding;        }        /**         * {@inheritDoc}         */        public String getExpressionString() {            return getMethodBinding().getExpressionString();        }        /**         * {@inheritDoc}         */        public Class getType(final FacesContext context) {            return getMethodBinding().getType(context);        }        /**         * {@inheritDoc}         */        public Object invoke(final FacesContext context, final Object[] params) {            return getMethodBinding().invoke(context, params);        }    }    /** The Application of the underlying JSF implementation. */    private final Application application;    /**     * Standard constructor.     */    public MethodBindingPropertyEditor() {        this(((ApplicationFactory) FactoryFinder                .getFactory(FactoryFinder.APPLICATION_FACTORY))                .getApplication());    }    /**     * Creates a MethodBindingPropertyEditor with the given {@link Application}.     *      * @param application     *            the Application of the underlying JSF implementation     */    public MethodBindingPropertyEditor(final Application application) {        super();        Assert.notNull(application);        this.application = application;    }    /**     * {@inheritDoc}     */    public void setAsText(final String text) {        try {            if (FacesUtils.isValueReference(text)) {                setValue(new DelegatingMethodBinding(text));            } else {                setValue(new ConstantMethodBinding(text));            }        } catch (Exception ex) {            throw new IllegalArgumentException(ex.getMessage());        }    }    /**     * {@inheritDoc}     */    public String getAsText() {        MethodBinding mb = (MethodBinding) getValue();        String result = "";        if (mb != null) {            result = mb.getExpressionString();        }        return result;    }}

⌨️ 快捷键说明

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