package kr.pe.kwonnam.jsp.inheritance; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; import java.io.StringWriter; /** * 상속할 레이아웃을 지정하는 태그 * <p/> * Author: KwonNam Son([email protected]) */ public class ExtendsTag extends SimpleTagSupport { public static final String PREFIX_ATTR_NAME = "jsp-inheritance-prefix"; public static final String SUFFIX_ATTR_NAME = "jsp-inheritance-suffix"; /** * Parent Template name(relative path) * */ private String name; public void setName(String name) { this.name = name; } @Override public void doTag() throws JspException, IOException { StringWriter ignoredWriter = new StringWriter(); getJspBody().invoke(ignoredWriter); // ignore body text PageContext pageContext = (PageContext) getJspContext(); try { pageContext.forward(getRefinedName()); } catch (ServletException e) { throw new RuntimeException(e.getMessage(), e); } } protected String getRefinedName() { ServletContext servletContext = ((PageContext) getJspContext()).getServletContext(); String prefix = servletContext.getInitParameter(PREFIX_ATTR_NAME); String suffix = servletContext.getInitParameter(SUFFIX_ATTR_NAME); if (prefix == null) { prefix = ""; } if (suffix == null) { suffix = ""; } return prefix + name + suffix; } }