001    // Copyright (c) 2011. The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.corelib.mixins;
016    
017    import org.apache.tapestry5.BindingConstants;
018    import org.apache.tapestry5.ClientElement;
019    import org.apache.tapestry5.Field;
020    import org.apache.tapestry5.FieldFocusPriority;
021    import org.apache.tapestry5.annotations.AfterRender;
022    import org.apache.tapestry5.annotations.Environmental;
023    import org.apache.tapestry5.annotations.InjectContainer;
024    import org.apache.tapestry5.annotations.Parameter;
025    import org.apache.tapestry5.corelib.components.Form;
026    import org.apache.tapestry5.ioc.annotations.Inject;
027    import org.apache.tapestry5.services.javascript.JavaScriptSupport;
028    import org.slf4j.Logger;
029    
030    /**
031     * A mixin that instruments the outer {@link org.apache.tapestry5.corelib.components.Form} on which
032     * component the focus should be activated.
033     * <p/>
034     * This is meant to be used only with {@link org.apache.tapestry5.corelib.components.Form} component.
035     *
036     * @since 5.3
037     * @deprecated As of release 5.4, replaced by {@link org.apache.tapestry5.corelib.mixins.OverrideFieldFocus}
038     * @tapestrydoc
039     */
040    @Deprecated
041    public class FormFieldFocus
042    {
043        @Inject
044        private Logger logger;
045    
046        /**
047         * The outer Form
048         */
049        @InjectContainer
050        private Form form;
051    
052        /**
053         * The {@link org.apache.tapestry5.Field} instance that will receive the focus within
054         * the {@link org.apache.tapestry5.corelib.components.Form}.
055         */
056        @Parameter(required = true, defaultPrefix = BindingConstants.COMPONENT, allowNull = false)
057        private Field focusField;
058    
059        @Environmental
060        private JavaScriptSupport javascriptSupport;
061    
062    
063        @AfterRender
064        void focusField()
065        {
066            javascriptSupport.autofocus(FieldFocusPriority.OVERRIDE, focusField.getClientId());
067    
068            logger.trace("Focus OVERRIDE done on field {}", focusField.getClientId());
069        }
070    
071    }