File: FacesComponent.java

package info (click to toggle)
mojarra 2.2.8-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 6,976 kB
  • ctags: 6,952
  • sloc: xml: 33,729; java: 29,914; makefile: 13
file content (136 lines) | stat: -rw-r--r-- 6,154 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package javax.faces.component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Inherited;


/**
 * <p class="changed_added_2_0">The presence of this annotation on a
 * class automatically registers the class with the runtime as a {@link
 * UIComponent}.  The value of the {@link #value} attribute is taken to
 * be the <em>component-type</em> and the fully qualified class name of
 * the class to which this annotation is attached is taken to be the
 * <em>component-class</em>.  The implementation must guarantee that for
 * each class annotated with <code>FacesComponent</code>, found with the
 * scanning algorithm in section JSF.11.5, {@link
 * javax.faces.application.Application#addComponent(java.lang.String,java.lang.String)}
 * is called, passing the derived <em>component-type</em> as the first
 * argument and the derived <em>component-class</em> as the second
 * argument.  The implementation must guarantee that all such calls to
 * <code>addComponent()</code> happen during application startup time
 * and before any requests are serviced.</p>

 */ 

/**
 * <p><span class="changed_modified_2_2">The</span> presence of this annotation
 * on a class that extends {@link UIComponent} must cause the runtime to 
 * register this class as a component suitable for inclusion in a view.
 * <span class="changed_added_2_2">If the <code>createTag</code> attribute
 * is <code>true</code>, the runtime must create a corresponding Facelet
 * tag handler according to the rules specified in the attributes of 
 * this annotation.</span></p>
 * 
 */

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface FacesComponent {
    
    /**
     * <p class="changed_added_2_2">Components that declare a 
     * <code>createTag = true</code> attribute will be placed into this tag
     * namespace if the namespace attribute is omitted.</p>
     */
    public static final String NAMESPACE = "http://xmlns.jcp.org/jsf/component";

    /**
     * <p class="changed_added_2_0"><span class="changed_modified_2_2">The</span>
     * value of this annotation attribute is taken to be the 
     * <em>component-type</em> with which instances of this class of component can be instantiated by
     * calling {@link
     * javax.faces.application.Application#createComponent(java.lang.String)}.
     * <span class="changed_added_2_2">If no value is specified, or the value is
     * <code>null</code>, the value is taken to be the return of calling
     * <code>getSimpleName</code> on the class to which this annotation
     * is attached and lowercasing the first character.  If more than one
     * component with this derived name is found, the results are undefined.</span></p>
     */ 

    String value() default "";
    
    /**
     * <p class="changed_added_2_2">If the value of this attribute is 
     * <code>true</code>, the runtime must create a Facelet tag handler, 
     * that extends from {@link javax.faces.view.facelets.ComponentHandler},
     * suitable for use in pages under the tag library with namespace given
     * by the value of the {@link #namespace} attribute.</p>
     */
    
    boolean createTag() default false;
    
    /**
     * <p class="changed_added_2_2">If the value of the {@link #createTag} 
     * attribute is <code>true</code>, the runtime must use this
     * value as the tag name for including an instance of the component
     * annotated with this annotation in a view.  If this attribute is not
     * specified on a usage of this annotation, the simple name of the 
     * class on which this annotation is declared, with the first character 
     * lowercased, is taken to be the value.</p>
     */
    String tagName() default "";
    
    /**
     * <p class="changed_added_2_2">If the value of the {@link #createTag} 
     * attribute is <code>true</code>, the value of this attribute is taken
     * to be the tag library namespace into which this component is placed.</p>
     * 
     */
    
    String namespace() default NAMESPACE;
    
}