View Javadoc

1   /*
2    * $Id: ComponentTagSupport.java 451544 2006-09-30 05:38:02Z mrdon $
3    *
4    * Copyright 2006 The Apache Software Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * 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, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.struts2.views.jsp;
19  
20  import javax.servlet.http.HttpServletRequest;
21  import javax.servlet.http.HttpServletResponse;
22  import javax.servlet.jsp.JspException;
23  
24  import org.apache.struts2.components.Component;
25  
26  import com.opensymphony.xwork2.util.ValueStack;
27  
28  /***
29   */
30  public abstract class ComponentTagSupport extends StrutsBodyTagSupport {
31      protected Component component;
32  
33      public abstract Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res);
34  
35      public int doEndTag() throws JspException {
36          component.end(pageContext.getOut(), getBody());
37          component = null;
38          return EVAL_PAGE;
39      }
40  
41      public int doStartTag() throws JspException {
42          component = getBean(getStack(), (HttpServletRequest) pageContext.getRequest(), (HttpServletResponse) pageContext.getResponse());
43          populateParams();
44          boolean evalBody = component.start(pageContext.getOut());
45  
46          if (evalBody) {
47              return component.usesBody() ? EVAL_BODY_BUFFERED : EVAL_BODY_INCLUDE;
48          } else {
49              return SKIP_BODY;
50          }
51      }
52  
53      protected void populateParams() {
54          component.setId(id);
55      }
56  
57      public Component getComponent() {
58          return component;
59      }
60  }