View Javadoc

1   package org.seasar.cubby.tags;
2   
3   import java.io.IOException;
4   
5   import javax.servlet.jsp.JspException;
6   import javax.servlet.jsp.JspWriter;
7   import javax.servlet.jsp.PageContext;
8   import javax.servlet.jsp.SkipPageException;
9   
10  import org.apache.taglibs.standard.tag.rt.core.ImportTag;
11  
12  /**
13   * レイアウト継承を実現するテンプレートタグ
14   * <p>
15   * この機能は今後変更になる可能性があります。
16   * </p>
17   * 
18   * @author agata
19   */
20  public class TemplateTag extends DynamicAttributesTagSupport {
21  
22  	/**
23  	 * 継承元のJSPパス
24  	 */
25  	private String extend;
26  
27  	/**
28  	 * 継承元のJSPパスをセットします。
29  	 * 
30  	 * @param extend 継承元のJSPパス
31  	 */
32  	public void setExtend(final String extend) {
33  		this.extend = extend;
34  	}
35  
36  	/**
37  	 * タグの処理。
38  	 * (Japserによるタグファイルのコンパイル結果から移植しています)
39  	 */
40  	@Override
41  	public void doTag() throws JspException, IOException {
42  		getJspContext().setAttribute("parts", getDynamicAttribute(),
43  				PageContext.REQUEST_SCOPE);
44  		@SuppressWarnings("unused")
45  		JspWriter out = getJspContext().getOut();
46  		final ImportTag importTag = new ImportTag();
47  		importTag.setPageContext(getPageContext());
48  		importTag.setParent(new javax.servlet.jsp.tagext.TagAdapter(
49  				(javax.servlet.jsp.tagext.SimpleTag) this));
50  		importTag.setUrl(extend);
51  		int[] _jspx_push_body_count_c_import_0 = new int[] { 0 };
52  		try {
53  
54  			if (importTag.doStartTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE
55  					|| importTag.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
56  				throw new SkipPageException();
57  			}
58  		} catch (Throwable _jspx_exception) {
59  			while (_jspx_push_body_count_c_import_0[0]-- > 0)
60  				out = getJspContext().popBody();
61  			try {
62  				importTag.doCatch(_jspx_exception);
63  			} catch (Throwable e) {
64  				throw new JspException(e);
65  			}
66  		} finally {
67  			importTag.doFinally();
68  		}
69  	}
70  }