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.view.facelets.tag.jsf.core;
20  
21  import java.io.IOException;
22  
23  import javax.el.ELException;
24  import javax.faces.FacesException;
25  import javax.faces.component.UIComponent;
26  import javax.faces.view.facelets.FaceletContext;
27  import javax.faces.view.facelets.FaceletException;
28  import javax.faces.view.facelets.TagAttribute;
29  import javax.faces.view.facelets.TagConfig;
30  import javax.faces.view.facelets.TagException;
31  import javax.faces.view.facelets.TagHandler;
32  
33  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
34  
35  /**
36   * Register a named facet on the UIComponent associated with the closest parent UIComponent custom action. <p/> See <a
37   * target="_new" href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/tlddocs/f/facet.html">tag documentation</a>.
38   * 
39   * @author Jacob Hookom
40   * @version $Id: FacetHandler.java 1187700 2011-10-22 12:19:37Z bommel $
41   */
42  @JSFFaceletTag(
43          name = "f:facet",
44          bodyContent = "JSP", 
45          tagClass="javax.faces.webapp.FacetTag")
46  public final class FacetHandler extends TagHandler 
47      implements javax.faces.view.facelets.FacetHandler
48  {
49  
50      public static final String KEY = "facelets.FACET_NAME";
51  
52      protected final TagAttribute name;
53  
54      public FacetHandler(TagConfig config)
55      {
56          super(config);
57          this.name = this.getRequiredAttribute("name");
58      }
59  
60      /*
61       * (non-Javadoc)
62       * 
63       * @see javax.faces.view.facelets.FaceletHandler#apply(javax.faces.view.facelets.FaceletContext, javax.faces.component.UIComponent)
64       */
65      public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, FaceletException,
66              ELException
67      {
68          if (parent == null)
69          {
70              throw new TagException(this.tag, "Parent UIComponent was null");
71          }
72          parent.getAttributes().put(KEY, this.name.getValue(ctx));
73          try
74          {
75              this.nextHandler.apply(ctx, parent);
76          }
77          finally
78          {
79              parent.getAttributes().remove(KEY);
80          }
81      }
82  
83      public String getFacetName(FaceletContext ctx)
84      {
85          return this.name.getValue(ctx);
86      }
87  }