View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package javax.faces.component;
20  
21  import javax.faces.context.FacesContext;
22  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFComponent;
23  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFExclude;
24  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFProperty;
25  
26  /**
27   * This tag associates a set of selection list items with the nearest
28   * parent UIComponent. The set of SelectItem objects is retrieved via
29   * a value-binding.
30   * <p>
31   * Unless otherwise specified, all attributes accept static values
32   * or EL expressions.
33   * </p>
34   * <p>
35   * UISelectItems should be nested inside a UISelectMany or UISelectOne component,
36   * and results in  the addition of one ore more SelectItem instance to the list of available options
37   * for the parent component
38   * </p>
39   */
40  @JSFComponent
41  (clazz = "javax.faces.component.UISelectItems",template=true,
42   name = "f:selectItems",
43   tagClass = "org.apache.myfaces.taglib.core.SelectItemsTag",
44   bodyContent = "empty")
45  abstract class _UISelectItems extends UIComponentBase
46  {
47  
48    static public final String COMPONENT_FAMILY =
49      "javax.faces.SelectItems";
50    static public final String COMPONENT_TYPE =
51      "javax.faces.SelectItems";
52  
53    /**
54     * Disable this property; although this class extends a base-class that
55     * defines a read/write rendered property, this particular subclass
56     * does not support setting it. Yes, this is broken OO design: direct
57     * all complaints to the JSF spec group.
58     */
59    @JSFProperty(tagExcluded=true)
60    @Override
61    public void setRendered(boolean state)
62    {
63        super.setRendered(state);
64        //call parent method due TCK problems
65        //throw new UnsupportedOperationException();
66    }
67    
68    @Override
69    protected FacesContext getFacesContext()
70    {
71        //In theory the parent most of the times has 
72        //the cached FacesContext instance, because this
73        //element is purely logical, and the parent is the one
74        //where encodeXXX was invoked. But only limit the
75        //search to the closest parent.
76        UIComponent parent = getParent();
77        if (parent != null && parent.isCachedFacesContext())
78        {
79            return parent.getFacesContext();
80        }
81        else
82        {
83            return super.getFacesContext();
84        }
85    }
86  
87    /**
88     * The initial value of this component.
89     *
90     * @return  the new value value
91     */
92    @JSFProperty
93    public abstract Object getValue();
94    
95    /**
96     * Name of a request-scope attribute under which the current item
97     * of the collection, array, etc. of the value attribute will be 
98     * exposed so that it can be referred to in EL for other attributes 
99     * of this component.
100    * 
101    * @since 2.0
102    * @return
103    */
104   @JSFExclude
105   @JSFProperty(literalOnly = true)
106   public String getVar()
107   {
108       return null;
109   }
110   
111   /**
112    * The value for the current item.
113    * 
114    * @since 2.0
115    * @return
116    */
117   @JSFExclude
118   @JSFProperty
119   public Object getItemValue()
120   {
121       return null;
122   }
123   
124   /**
125    * The label of the current item.
126    * 
127    * @since 2.0
128    * @return
129    */
130   @JSFExclude
131   @JSFProperty
132   public String getItemLabel()
133   {
134       return null;
135   }
136   
137   /**
138    * The description of the current item.
139    * 
140    * @since 2.0
141    * @return
142    */
143   @JSFExclude
144   @JSFProperty
145   public String getItemDescription()
146   {
147       return null;
148   }
149   
150   /**
151    * Determines if the current item is selectable or not.
152    * 
153    * @since 2.0
154    * @return
155    */
156   @JSFExclude
157   @JSFProperty(defaultValue = "false", deferredValueType="java.lang.Boolean")
158   public boolean isItemDisabled()
159   {
160       return false;
161   }
162   
163   /**
164    * Determines if the rendered markup for the current item receives
165    * normal JSF HTML escaping or not.
166    * 
167    * @since 2.0
168    * @return
169    */
170   @JSFExclude
171   @JSFProperty(defaultValue = "true", deferredValueType="java.lang.Boolean")
172   public boolean isItemLabelEscaped()
173   {
174       return true;
175   }
176 
177 }