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.taglib.core;
20  
21  import java.util.logging.Level;
22  import java.util.logging.Logger;
23  
24  import javax.el.ValueExpression;
25  import javax.faces.component.ActionSource;
26  import javax.faces.component.UIComponent;
27  import javax.faces.event.ActionListener;
28  import javax.faces.webapp.UIComponentClassicTagBase;
29  import javax.servlet.jsp.JspException;
30  import javax.servlet.jsp.tagext.TagSupport;
31  
32  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFJspAttribute;
33  import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFJspTag;
34  import org.apache.myfaces.event.SetPropertyActionListener;
35  
36  /**
37   * @author Dennis Byrne
38   * @since 1.2
39   */
40  @JSFJspTag(name = "f:setPropertyActionListener", bodyContent = "empty")
41  public class SetPropertyActionListenerTag extends TagSupport
42  {
43  
44      //private static final Log log = LogFactory.getLog(SetPropertyActionListenerTag.class);
45      private static final Logger log = Logger.getLogger(SetPropertyActionListenerTag.class.getName());
46  
47      private ValueExpression target;
48  
49      private ValueExpression value;
50  
51      @Override
52      public int doStartTag() throws JspException
53      {
54  
55          if (log.isLoggable(Level.FINE))
56          {
57              log.fine("JSF 1.2 Spec : Create a new instance of the ActionListener");
58          }
59  
60          ActionListener actionListener = new SetPropertyActionListener(target, value);
61  
62          UIComponentClassicTagBase tag = UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
63  
64          if (tag == null)
65          {
66              throw new JspException("Could not find a " + "parent UIComponentClassicTagBase ... is this "
67                      + "tag in a child of a UIComponentClassicTagBase?");
68          }
69  
70          if (tag.getCreated())
71          {
72  
73              UIComponent component = tag.getComponentInstance();
74  
75              if (component == null)
76              {
77                  throw new JspException(" Could not locate a UIComponent " + "for a UIComponentClassicTagBase w/ a "
78                          + "JSP id of " + tag.getJspId());
79              }
80  
81              if (!(component instanceof ActionSource))
82              {
83                  throw new JspException("Component w/ id of " + component.getId()
84                          + " is associated w/ a tag w/ JSP id of " + tag.getJspId() + ". This component is of type "
85                          + component.getClass() + ", which is not an " + ActionSource.class);
86              }
87  
88              if (log.isLoggable(Level.FINE))
89              {
90                  log.fine(" ... register it with the UIComponent " + "instance associated with our most immediately "
91                          + "surrounding UIComponentTagBase");
92              }
93  
94              ((ActionSource)component).addActionListener(actionListener);
95  
96          }
97  
98          return SKIP_BODY;
99      }
100 
101     /**
102      * ValueExpression for the destination of the value attribute.
103      */
104     @JSFJspAttribute(required = true,
105             className="javax.el.ValueExpression",
106             deferredValueType="java.lang.Object")
107     public ValueExpression getTarget()
108     {
109         return target;
110     }
111 
112     public void setTarget(ValueExpression target)
113     {
114         this.target = target;
115     }
116 
117     /**
118      * ValueExpression for the value of the target attribute.
119      * 
120      * @return
121      */
122     @JSFJspAttribute(required = true,
123             className="javax.el.ValueExpression",
124             deferredValueType="java.lang.Object")
125     public ValueExpression getValue()
126     {
127         return value;
128     }
129 
130     public void setValue(ValueExpression value)
131     {
132         this.value = value;
133     }
134 
135     @Override
136     public void release()
137     {
138         target = null;
139         value = null;
140     }
141 
142 }