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 org.apache.myfaces.trinidad.webapp;
20  
21  import javax.faces.component.EditableValueHolder;
22  import javax.faces.component.UIComponent;
23  import javax.faces.validator.Validator;
24  import javax.faces.webapp.UIComponentClassicTagBase;
25  import javax.faces.webapp.UIComponentELTag;
26  import javax.servlet.jsp.JspException;
27  import javax.servlet.jsp.tagext.Tag;
28  
29  /**
30   * This is the Trinidad version of the JSF <code>ValidatorELTag</code> class.
31   * The main difference is that this class is <b>NOT</b> inheriting from 
32   * the standard <code>TagSupport</code> and therefore does not 
33   * implement <code>Serializable</code> interface.
34   * 
35   * @author Apache MyFaces team
36   */
37  public abstract class TrinidadValidatorELTag extends TrinidadTagSupport
38  {
39      @Override
40      public int doStartTag() throws JspException
41      {
42          UIComponentClassicTagBase componentTag = UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
43  
44          if (componentTag == null)
45          {
46              throw new JspException("no parent UIComponentTag found");
47          }
48  
49          if (!componentTag.getCreated())
50          {
51              return Tag.SKIP_BODY;
52          }
53  
54          Validator validator = createValidator();
55  
56          UIComponent component = componentTag.getComponentInstance();
57          if (component == null)
58          {
59              throw new JspException("parent UIComponentTag has no UIComponent");
60          }
61  
62          if (!(component instanceof EditableValueHolder))
63          {
64              throw new JspException("UIComponent is no EditableValueHolder");
65          }
66          ((EditableValueHolder)component).addValidator(validator);
67  
68          return Tag.SKIP_BODY;
69      }
70  
71      protected abstract Validator createValidator() throws JspException;
72  
73  }