View Javadoc

1   // WARNING: This file was automatically generated. Do not edit it directly,
2   //          or you will lose your changes.
3   
4   /*
5    * Licensed to the Apache Software Foundation (ASF) under one
6    * or more contributor license agreements.  See the NOTICE file
7    * distributed with this work for additional information
8    * regarding copyright ownership.  The ASF licenses this file
9    * to you under the Apache License, Version 2.0 (the
10   * "License"); you may not use this file except in compliance
11   * with the License.  You may obtain a copy of the License at
12   *
13   *   http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing,
16   * software distributed under the License is distributed on an
17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18   * KIND, either express or implied.  See the License for the
19   * specific language governing permissions and limitations
20   * under the License.
21  */
22  package org.apache.myfaces.trinidad.component.core.input;
23  
24  import java.util.Arrays;
25  import java.util.Collection;
26  import java.util.Collections;
27  import java.util.List;
28  import java.util.Map;
29  import javax.faces.component.UIComponent;
30  import javax.faces.component.behavior.ClientBehavior;
31  import javax.faces.component.behavior.ClientBehaviorHolder;
32  import org.apache.myfaces.trinidad.bean.FacesBean;
33  import org.apache.myfaces.trinidad.bean.PropertyKey;
34  import org.apache.myfaces.trinidad.component.UIXSelectBoolean;
35  import org.apache.myfaces.trinidad.util.ComponentUtils;
36  
37  /**
38   *
39   * <html><p>
40   *           The selectBooleanRadio component maps to a single browser input
41   *           radio, grouped with all other selectBooleanRadio controls
42   *           in the same form which share the same &quot;group&quot; attribute.
43   *           It supports displaying a prompt, text, and messages.
44   *           Radio buttons with the same &quot;group&quot; will be placed in the
45   *           same group with mutually exclusive selection, regardless of
46   *           their physical placement on the page.
47   *           </p></html>
48   *
49   * <h4>Events:</h4>
50   * <table border="1" width="100%" cellpadding="3" summary="">
51   * <tr bgcolor="#CCCCFF" class="TableHeadingColor">
52   * <th align="left">Type</th>
53   * <th align="left">Phases</th>
54   * <th align="left">Description</th>
55   * </tr>
56   * <tr class="TableRowColor">
57   * <td valign="top"><code>javax.faces.event.ValueChangeEvent</code></td>
58   * <td valign="top" nowrap>Process<br>Validations<br>Apply<br>Request<br>Values</td>
59   * <td valign="top">The valueChange event is delivered when the value
60                         attribute is changed.</td>
61   * </tr>
62   * <tr class="TableRowColor">
63   * <td valign="top"><code>org.apache.myfaces.trinidad.event.AttributeChangeEvent</code></td>
64   * <td valign="top" nowrap>Invoke<br>Application<br>Apply<br>Request<br>Values</td>
65   * <td valign="top">Event delivered to describe an attribute change.  Attribute change events are not delivered for any programmatic change to a property.  They are only delivered when a renderer changes a property without the application's specific request.  An example of an attribute change event might include the width of a column that supported client-side resizing.</td>
66   * </tr>
67   * </table>
68   */
69  public class CoreSelectBooleanRadio extends UIXSelectBoolean
70                                      implements ClientBehaviorHolder
71  {
72    static public final FacesBean.Type TYPE = new FacesBean.Type(
73      UIXSelectBoolean.TYPE);
74    static public final PropertyKey CONTENT_STYLE_KEY =
75      TYPE.registerKey("contentStyle", String.class);
76    static public final PropertyKey AUTO_SUBMIT_KEY =
77      TYPE.registerKey("autoSubmit", Boolean.class, Boolean.FALSE);
78    static public final PropertyKey READ_ONLY_KEY =
79      TYPE.registerKey("readOnly", Boolean.class, Boolean.FALSE);
80    static public final PropertyKey DISABLED_KEY =
81      TYPE.registerKey("disabled", Boolean.class, Boolean.FALSE);
82    static public final PropertyKey LABEL_KEY =
83      TYPE.registerKey("label", String.class);
84    static public final PropertyKey SIMPLE_KEY =
85      TYPE.registerKey("simple", Boolean.class, Boolean.FALSE);
86    static public final PropertyKey TEXT_KEY =
87      TYPE.registerKey("text", String.class);
88    static public final PropertyKey ACCESS_KEY_KEY =
89      TYPE.registerKey("accessKey", Character.class);
90    static public final PropertyKey GROUP_KEY =
91      TYPE.registerKey("group", String.class);
92    static public final PropertyKey ONCHANGE_KEY =
93      TYPE.registerKey("onchange", String.class);
94    static public final PropertyKey INLINE_STYLE_KEY =
95      TYPE.registerKey("inlineStyle", String.class);
96    static public final PropertyKey STYLE_CLASS_KEY =
97      TYPE.registerKey("styleClass", String.class);
98    static public final PropertyKey SHORT_DESC_KEY =
99      TYPE.registerKey("shortDesc", String.class);
100   static public final PropertyKey PARTIAL_TRIGGERS_KEY =
101     TYPE.registerKey("partialTriggers", String[].class, null, 0, PropertyKey.Mutable.RARELY);
102   static public final PropertyKey ONCLICK_KEY =
103     TYPE.registerKey("onclick", String.class);
104   static public final PropertyKey ONDBLCLICK_KEY =
105     TYPE.registerKey("ondblclick", String.class);
106   static public final PropertyKey ONMOUSEDOWN_KEY =
107     TYPE.registerKey("onmousedown", String.class);
108   static public final PropertyKey ONMOUSEUP_KEY =
109     TYPE.registerKey("onmouseup", String.class);
110   static public final PropertyKey ONMOUSEOVER_KEY =
111     TYPE.registerKey("onmouseover", String.class);
112   static public final PropertyKey ONMOUSEMOVE_KEY =
113     TYPE.registerKey("onmousemove", String.class);
114   static public final PropertyKey ONMOUSEOUT_KEY =
115     TYPE.registerKey("onmouseout", String.class);
116   static public final PropertyKey ONKEYPRESS_KEY =
117     TYPE.registerKey("onkeypress", String.class);
118   static public final PropertyKey ONKEYDOWN_KEY =
119     TYPE.registerKey("onkeydown", String.class);
120   static public final PropertyKey ONKEYUP_KEY =
121     TYPE.registerKey("onkeyup", String.class);
122   static public final PropertyKey ONBLUR_KEY =
123     TYPE.registerKey("onblur", String.class);
124   static public final PropertyKey ONFOCUS_KEY =
125     TYPE.registerKey("onfocus", String.class);
126   static public final PropertyKey SHOW_REQUIRED_KEY =
127     TYPE.registerKey("showRequired", Boolean.class, Boolean.FALSE);
128   static public final String HELP_FACET = "help";
129 
130   static public final String COMPONENT_FAMILY =
131     "org.apache.myfaces.trinidad.SelectBoolean";
132   static public final String COMPONENT_TYPE =
133     "org.apache.myfaces.trinidad.CoreSelectBooleanRadio";
134   // Supported client events for client behaviors:
135   private final static Collection<String> _EVENT_NAMES = Collections.unmodifiableCollection(
136     Arrays.asList(
137       "change", "click", "dblclick", "mousedown", "mouseup", "mouseover",
138       "mousemove", "mouseout", "keypress", "keydown", "keyup", "focus",
139       "blur", "valueChange"
140     ));
141 
142   /**
143    * Construct an instance of the CoreSelectBooleanRadio.
144    */
145   public CoreSelectBooleanRadio()
146   {
147     super("org.apache.myfaces.trinidad.Radio");
148   }
149 
150   /**
151    * This facet should contain field level help.
152    */
153   final public UIComponent getHelp()
154   {
155     return getFacet(HELP_FACET);
156   }
157 
158   /**
159    * This facet should contain field level help.
160    */
161   @SuppressWarnings("unchecked")
162   final public void setHelp(UIComponent helpFacet)
163   {
164     getFacets().put(HELP_FACET, helpFacet);
165   }
166 
167   /**
168    * Gets the CSS styles to attach to the content of the component.  For example, you can set the width of that portion to 100 pixels by setting this attribute to "width: 100px".
169    *
170    * @return  the new contentStyle value
171    */
172   final public String getContentStyle()
173   {
174     return ComponentUtils.resolveString(getProperty(CONTENT_STYLE_KEY));
175   }
176 
177   /**
178    * Sets the CSS styles to attach to the content of the component.  For example, you can set the width of that portion to 100 pixels by setting this attribute to "width: 100px".
179    * 
180    * @param contentStyle  the new contentStyle value
181    */
182   final public void setContentStyle(String contentStyle)
183   {
184     setProperty(CONTENT_STYLE_KEY, (contentStyle));
185   }
186 
187   /**
188    * Gets If set to TRUE on a form element, the component will automatically submit
189    *      the enclosing form when an appropriate action takes place (a click, text
190    *      change, etc.).
191    *
192    * @return  the new autoSubmit value
193    */
194   final public boolean isAutoSubmit()
195   {
196     return ComponentUtils.resolveBoolean(getProperty(AUTO_SUBMIT_KEY), false);
197   }
198 
199   /**
200    * Sets If set to TRUE on a form element, the component will automatically submit
201    *      the enclosing form when an appropriate action takes place (a click, text
202    *      change, etc.).
203    * 
204    * @param autoSubmit  the new autoSubmit value
205    */
206   final public void setAutoSubmit(boolean autoSubmit)
207   {
208     setProperty(AUTO_SUBMIT_KEY, autoSubmit ? Boolean.TRUE : Boolean.FALSE);
209   }
210 
211   /**
212    * Gets whether the element is read-only.
213    *
214    * @return  the new readOnly value
215    */
216   final public boolean isReadOnly()
217   {
218     return ComponentUtils.resolveBoolean(getProperty(READ_ONLY_KEY), false);
219   }
220 
221   /**
222    * Sets whether the element is read-only.
223    * 
224    * @param readOnly  the new readOnly value
225    */
226   final public void setReadOnly(boolean readOnly)
227   {
228     setProperty(READ_ONLY_KEY, readOnly ? Boolean.TRUE : Boolean.FALSE);
229   }
230 
231   /**
232    * Gets whether the element is disabled.
233    *
234    * @return  the new disabled value
235    */
236   final public boolean isDisabled()
237   {
238     return ComponentUtils.resolveBoolean(getProperty(DISABLED_KEY), false);
239   }
240 
241   /**
242    * Sets whether the element is disabled.
243    * 
244    * @param disabled  the new disabled value
245    */
246   final public void setDisabled(boolean disabled)
247   {
248     setProperty(DISABLED_KEY, disabled ? Boolean.TRUE : Boolean.FALSE);
249   }
250 
251   /**
252    * Gets the label of the bean.
253    *
254    * @return  the new label value
255    */
256   final public String getLabel()
257   {
258     return ComponentUtils.resolveString(getProperty(LABEL_KEY));
259   }
260 
261   /**
262    * Sets the label of the bean.
263    * 
264    * @param label  the new label value
265    */
266   final public void setLabel(String label)
267   {
268     setProperty(LABEL_KEY, (label));
269   }
270 
271   /**
272    * Gets a boolean value that controls whether the component
273    * provides label and message support;  when set to "true", the component will
274    * not display messaging support or the label (these attributes may be ignored: label,
275    * labelAndAccessKey, accessKey, showRequired,
276    * tip), and may use simpler layout primitives
277    *
278    * @return  the new simple value
279    */
280   final public boolean isSimple()
281   {
282     return ComponentUtils.resolveBoolean(getProperty(SIMPLE_KEY), false);
283   }
284 
285   /**
286    * Sets a boolean value that controls whether the component
287    * provides label and message support;  when set to "true", the component will
288    * not display messaging support or the label (these attributes may be ignored: label,
289    * labelAndAccessKey, accessKey, showRequired,
290    * tip), and may use simpler layout primitives
291    * 
292    * @param simple  the new simple value
293    */
294   final public void setSimple(boolean simple)
295   {
296     setProperty(SIMPLE_KEY, simple ? Boolean.TRUE : Boolean.FALSE);
297   }
298 
299   /**
300    * Gets the text of the radio button.
301    *
302    * @return  the new text value
303    */
304   final public String getText()
305   {
306     return ComponentUtils.resolveString(getProperty(TEXT_KEY));
307   }
308 
309   /**
310    * Sets the text of the radio button.
311    * 
312    * @param text  the new text value
313    */
314   final public void setText(String text)
315   {
316     setProperty(TEXT_KEY, (text));
317   }
318 
319   /**
320    * Gets <html>
321    *  Character used to gain quick access to this radio button.
322    *           For accessibility reasons, this functionality is not supported in
323    *           screen reader mode.
324    *           <p>
325    *             If the same access key appears in multiple locations in the
326    *             same page of output, the rendering user agent will cycle
327    *             among the elements accessed by the similar keys.
328    *           </p><p>
329    *             This attribute is sometimes referred to as the "mnemonic".
330    *           </p><p>
331    *             The character specified by this attribute
332    *             <strong>must</strong>exist in the
333    *             <code>text</code>attribute of this CheckBox instance.
334    *             If it does not, the user will receive no visual indication of
335    *             the existence of the accessKey.
336    *             </p></html>
337    *
338    * @return  the new accessKey value
339    */
340   final public char getAccessKey()
341   {
342     return ComponentUtils.resolveCharacter((Character)getProperty(ACCESS_KEY_KEY));
343   }
344 
345   /**
346    * Sets <html>
347    *  Character used to gain quick access to this radio button.
348    *           For accessibility reasons, this functionality is not supported in
349    *           screen reader mode.
350    *           <p>
351    *             If the same access key appears in multiple locations in the
352    *             same page of output, the rendering user agent will cycle
353    *             among the elements accessed by the similar keys.
354    *           </p><p>
355    *             This attribute is sometimes referred to as the "mnemonic".
356    *           </p><p>
357    *             The character specified by this attribute
358    *             <strong>must</strong>exist in the
359    *             <code>text</code>attribute of this CheckBox instance.
360    *             If it does not, the user will receive no visual indication of
361    *             the existence of the accessKey.
362    *             </p></html>
363    * 
364    * @param accessKey  the new accessKey value
365    */
366   final public void setAccessKey(char accessKey)
367   {
368     setProperty(ACCESS_KEY_KEY, Character.valueOf(accessKey));
369   }
370 
371   /**
372    *
373    * @return  the new group value
374    */
375   final public String getGroup()
376   {
377     return ComponentUtils.resolveString(getProperty(GROUP_KEY));
378   }
379 
380   /**
381    * 
382    * @param group  the new group value
383    */
384   final public void setGroup(String group)
385   {
386     setProperty(GROUP_KEY, (group));
387   }
388 
389   /**
390    * Gets event handler for when the value is changed.
391    *
392    * @return  the new onchange value
393    */
394   final public String getOnchange()
395   {
396     return ComponentUtils.resolveString(getProperty(ONCHANGE_KEY));
397   }
398 
399   /**
400    * Sets event handler for when the value is changed.
401    * 
402    * @param onchange  the new onchange value
403    */
404   final public void setOnchange(String onchange)
405   {
406     setProperty(ONCHANGE_KEY, (onchange));
407   }
408 
409   /**
410    * Gets the CSS styles to use for this component.
411    *
412    * @return  the new inlineStyle value
413    */
414   final public String getInlineStyle()
415   {
416     return ComponentUtils.resolveString(getProperty(INLINE_STYLE_KEY));
417   }
418 
419   /**
420    * Sets the CSS styles to use for this component.
421    * 
422    * @param inlineStyle  the new inlineStyle value
423    */
424   final public void setInlineStyle(String inlineStyle)
425   {
426     setProperty(INLINE_STYLE_KEY, (inlineStyle));
427   }
428 
429   /**
430    * Gets a CSS style class to use for this component.
431    *
432    * @return  the new styleClass value
433    */
434   final public String getStyleClass()
435   {
436     return ComponentUtils.resolveString(getProperty(STYLE_CLASS_KEY));
437   }
438 
439   /**
440    * Sets a CSS style class to use for this component.
441    * 
442    * @param styleClass  the new styleClass value
443    */
444   final public void setStyleClass(String styleClass)
445   {
446     setProperty(STYLE_CLASS_KEY, (styleClass));
447   }
448 
449   /**
450    * Gets The short description of the component. This text is commonly used by user agents to display tooltip help text.
451    *
452    * @return  the new shortDesc value
453    */
454   final public String getShortDesc()
455   {
456     return ComponentUtils.resolveString(getProperty(SHORT_DESC_KEY));
457   }
458 
459   /**
460    * Sets The short description of the component. This text is commonly used by user agents to display tooltip help text.
461    * 
462    * @param shortDesc  the new shortDesc value
463    */
464   final public void setShortDesc(String shortDesc)
465   {
466     setProperty(SHORT_DESC_KEY, (shortDesc));
467   }
468 
469   /**
470    * Gets the IDs of the components that should trigger a partial update.
471    *         <p>
472    *         This component will listen on the trigger components. If one of the
473    *         trigger components receives an event that will cause it to update
474    *         in some way, this component will request to be updated too.</p>
475    *         <p>
476    *         Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
477    *         </p>
478    *         <p>
479    *         Identifiers must account for NamingContainers.  You can use a single colon to start the search from the root,
480    *         or use multiple colons to move up through the NamingContainer. For example,
481    *         "::" will pop out of this component's naming container (it pops out of itself if it is a naming container), 
482    *         ":::" will pop out of two naming containers, etc. The search for
483    *         the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the 
484    *         component with id = commandButton1 after popping out of two naming containers relative to this component.
485    *         To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
486    *
487    * @return  the new partialTriggers value
488    */
489   final public String[] getPartialTriggers()
490   {
491     return (String[])getProperty(PARTIAL_TRIGGERS_KEY);
492   }
493 
494   /**
495    * Sets the IDs of the components that should trigger a partial update.
496    *         <p>
497    *         This component will listen on the trigger components. If one of the
498    *         trigger components receives an event that will cause it to update
499    *         in some way, this component will request to be updated too.</p>
500    *         <p>
501    *         Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
502    *         </p>
503    *         <p>
504    *         Identifiers must account for NamingContainers.  You can use a single colon to start the search from the root,
505    *         or use multiple colons to move up through the NamingContainer. For example,
506    *         "::" will pop out of this component's naming container (it pops out of itself if it is a naming container), 
507    *         ":::" will pop out of two naming containers, etc. The search for
508    *         the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the 
509    *         component with id = commandButton1 after popping out of two naming containers relative to this component.
510    *         To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
511    * 
512    * @param partialTriggers  the new partialTriggers value
513    */
514   final public void setPartialTriggers(String[] partialTriggers)
515   {
516     setProperty(PARTIAL_TRIGGERS_KEY, (partialTriggers));
517   }
518 
519   /**
520    * Gets an onclick Javascript handler.
521    *
522    * @return  the new onclick value
523    */
524   final public String getOnclick()
525   {
526     return ComponentUtils.resolveString(getProperty(ONCLICK_KEY));
527   }
528 
529   /**
530    * Sets an onclick Javascript handler.
531    * 
532    * @param onclick  the new onclick value
533    */
534   final public void setOnclick(String onclick)
535   {
536     setProperty(ONCLICK_KEY, (onclick));
537   }
538 
539   /**
540    * Gets an ondblclick Javascript handler.
541    *
542    * @return  the new ondblclick value
543    */
544   final public String getOndblclick()
545   {
546     return ComponentUtils.resolveString(getProperty(ONDBLCLICK_KEY));
547   }
548 
549   /**
550    * Sets an ondblclick Javascript handler.
551    * 
552    * @param ondblclick  the new ondblclick value
553    */
554   final public void setOndblclick(String ondblclick)
555   {
556     setProperty(ONDBLCLICK_KEY, (ondblclick));
557   }
558 
559   /**
560    * Gets an onmousedown Javascript handler.
561    *
562    * @return  the new onmousedown value
563    */
564   final public String getOnmousedown()
565   {
566     return ComponentUtils.resolveString(getProperty(ONMOUSEDOWN_KEY));
567   }
568 
569   /**
570    * Sets an onmousedown Javascript handler.
571    * 
572    * @param onmousedown  the new onmousedown value
573    */
574   final public void setOnmousedown(String onmousedown)
575   {
576     setProperty(ONMOUSEDOWN_KEY, (onmousedown));
577   }
578 
579   /**
580    * Gets an onmouseup Javascript handler.
581    *
582    * @return  the new onmouseup value
583    */
584   final public String getOnmouseup()
585   {
586     return ComponentUtils.resolveString(getProperty(ONMOUSEUP_KEY));
587   }
588 
589   /**
590    * Sets an onmouseup Javascript handler.
591    * 
592    * @param onmouseup  the new onmouseup value
593    */
594   final public void setOnmouseup(String onmouseup)
595   {
596     setProperty(ONMOUSEUP_KEY, (onmouseup));
597   }
598 
599   /**
600    * Gets an onmouseover Javascript handler.
601    *
602    * @return  the new onmouseover value
603    */
604   final public String getOnmouseover()
605   {
606     return ComponentUtils.resolveString(getProperty(ONMOUSEOVER_KEY));
607   }
608 
609   /**
610    * Sets an onmouseover Javascript handler.
611    * 
612    * @param onmouseover  the new onmouseover value
613    */
614   final public void setOnmouseover(String onmouseover)
615   {
616     setProperty(ONMOUSEOVER_KEY, (onmouseover));
617   }
618 
619   /**
620    * Gets an onmousemove Javascript handler.
621    *
622    * @return  the new onmousemove value
623    */
624   final public String getOnmousemove()
625   {
626     return ComponentUtils.resolveString(getProperty(ONMOUSEMOVE_KEY));
627   }
628 
629   /**
630    * Sets an onmousemove Javascript handler.
631    * 
632    * @param onmousemove  the new onmousemove value
633    */
634   final public void setOnmousemove(String onmousemove)
635   {
636     setProperty(ONMOUSEMOVE_KEY, (onmousemove));
637   }
638 
639   /**
640    * Gets an onmouseout Javascript handler.
641    *
642    * @return  the new onmouseout value
643    */
644   final public String getOnmouseout()
645   {
646     return ComponentUtils.resolveString(getProperty(ONMOUSEOUT_KEY));
647   }
648 
649   /**
650    * Sets an onmouseout Javascript handler.
651    * 
652    * @param onmouseout  the new onmouseout value
653    */
654   final public void setOnmouseout(String onmouseout)
655   {
656     setProperty(ONMOUSEOUT_KEY, (onmouseout));
657   }
658 
659   /**
660    * Gets an onkeypress Javascript handler.
661    *
662    * @return  the new onkeypress value
663    */
664   final public String getOnkeypress()
665   {
666     return ComponentUtils.resolveString(getProperty(ONKEYPRESS_KEY));
667   }
668 
669   /**
670    * Sets an onkeypress Javascript handler.
671    * 
672    * @param onkeypress  the new onkeypress value
673    */
674   final public void setOnkeypress(String onkeypress)
675   {
676     setProperty(ONKEYPRESS_KEY, (onkeypress));
677   }
678 
679   /**
680    * Gets an onkeydown Javascript handler.
681    *
682    * @return  the new onkeydown value
683    */
684   final public String getOnkeydown()
685   {
686     return ComponentUtils.resolveString(getProperty(ONKEYDOWN_KEY));
687   }
688 
689   /**
690    * Sets an onkeydown Javascript handler.
691    * 
692    * @param onkeydown  the new onkeydown value
693    */
694   final public void setOnkeydown(String onkeydown)
695   {
696     setProperty(ONKEYDOWN_KEY, (onkeydown));
697   }
698 
699   /**
700    * Gets an onkeyup Javascript handler.
701    *
702    * @return  the new onkeyup value
703    */
704   final public String getOnkeyup()
705   {
706     return ComponentUtils.resolveString(getProperty(ONKEYUP_KEY));
707   }
708 
709   /**
710    * Sets an onkeyup Javascript handler.
711    * 
712    * @param onkeyup  the new onkeyup value
713    */
714   final public void setOnkeyup(String onkeyup)
715   {
716     setProperty(ONKEYUP_KEY, (onkeyup));
717   }
718 
719   /**
720    * Gets the event handler for the component losing the focus.
721    *
722    * @return  the new onblur value
723    */
724   final public String getOnblur()
725   {
726     return ComponentUtils.resolveString(getProperty(ONBLUR_KEY));
727   }
728 
729   /**
730    * Sets the event handler for the component losing the focus.
731    * 
732    * @param onblur  the new onblur value
733    */
734   final public void setOnblur(String onblur)
735   {
736     setProperty(ONBLUR_KEY, (onblur));
737   }
738 
739   /**
740    * Gets the event handler for the component gaining the focus.
741    *
742    * @return  the new onfocus value
743    */
744   final public String getOnfocus()
745   {
746     return ComponentUtils.resolveString(getProperty(ONFOCUS_KEY));
747   }
748 
749   /**
750    * Sets the event handler for the component gaining the focus.
751    * 
752    * @param onfocus  the new onfocus value
753    */
754   final public void setOnfocus(String onfocus)
755   {
756     setProperty(ONFOCUS_KEY, (onfocus));
757   }
758 
759   /**
760    * Gets whether the associated control displays a visual indication of required user input. If a "required" attribute is also present, both the "required" attribute and the
761    *           "showRequired" attribute must be false for the visual indication not to be displayed.
762    *
763    * @return  the new showRequired value
764    */
765   final public boolean isShowRequired()
766   {
767     return ComponentUtils.resolveBoolean(getProperty(SHOW_REQUIRED_KEY), false);
768   }
769 
770   /**
771    * Sets whether the associated control displays a visual indication of required user input. If a "required" attribute is also present, both the "required" attribute and the
772    *           "showRequired" attribute must be false for the visual indication not to be displayed.
773    * 
774    * @param showRequired  the new showRequired value
775    */
776   final public void setShowRequired(boolean showRequired)
777   {
778     setProperty(SHOW_REQUIRED_KEY, showRequired ? Boolean.TRUE : Boolean.FALSE);
779   }
780 
781   @Override
782   public String getDefaultEventName()
783   {
784     return "change";
785   }
786 
787   @Override
788   public Collection<String> getEventNames()
789   {
790     return _EVENT_NAMES;
791   }
792 
793   @Override
794   public Map<String, List<ClientBehavior>> getClientBehaviors()
795   {
796     return super.getClientBehaviors();
797   }
798 
799   @Override
800   public void addClientBehavior(
801     String         eventName,
802     ClientBehavior behavior)
803   {
804     super.addClientBehavior(eventName, behavior);
805   }
806 
807   @Override
808   public String getFamily()
809   {
810     return COMPONENT_FAMILY;
811   }
812 
813   @Override
814   protected FacesBean.Type getBeanType()
815   {
816     return TYPE;
817   }
818 
819   /**
820    * Construct an instance of the CoreSelectBooleanRadio.
821    */
822   protected CoreSelectBooleanRadio(
823     String rendererType
824     )
825   {
826     super(rendererType);
827   }
828 
829   static
830   {
831     TYPE.lockAndRegister("org.apache.myfaces.trinidad.SelectBoolean","org.apache.myfaces.trinidad.Radio");
832   }
833 }