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.compiler;
20  
21  import java.io.IOException;
22  import javax.faces.component.UIComponent;
23  import javax.faces.view.facelets.FaceletContext;
24  import javax.faces.view.facelets.FaceletHandler;
25  import org.apache.myfaces.view.facelets.FaceletCompositionContext;
26  
27  /**
28   *
29   * @author lu4242
30   */
31  public class DynamicComponentFacelet implements FaceletHandler
32  {
33      //public static final String CREATE_CC_ON_POST_ADD_TO_VIEW = "oam.facelet.cc.CREATE_CC_ON_POST_ADD_TO_VIEW";
34      
35      private NamespaceHandler next;
36  
37      public DynamicComponentFacelet(NamespaceHandler next)
38      {
39          this.next = next;
40      }
41  
42      public void apply(FaceletContext ctx, UIComponent parent) throws IOException
43      {
44          /*
45          if (isNextHandlerCompositeComponent())
46          {
47              ctx.getFacesContext().getAttributes().put(CREATE_CC_ON_POST_ADD_TO_VIEW, Boolean.TRUE);
48          }*/
49          FaceletCompositionContext fcc = FaceletCompositionContext.getCurrentInstance(ctx);
50          boolean nextHandlerCompositeComponent = isNextHandlerCompositeComponent();
51          try
52          {
53              if (nextHandlerCompositeComponent)
54              {
55                  fcc.setDynamicCompositeComponentHandler(true);
56              }
57              next.apply(ctx, parent);
58          }
59          finally
60          {
61              if (nextHandlerCompositeComponent)
62              {
63                  fcc.setDynamicCompositeComponentHandler(false);
64              }
65          }
66      }
67      
68      public boolean isNextHandlerComponent()
69      {
70          return next.isNextHandlerComponent();
71      }
72      
73      public boolean isNextHandlerCompositeComponent()
74      {
75          return next.isNextHandlerCompositeComponent();
76      }    
77  }