実行画面 †
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib uri="/WEB-INF/tag.tld" prefix="myTag" %>
<html>
<head>
<title>JSP Fragment Example</title>
</head>
<body>
BEFORE TAG
<hr/>
<myTag:fragmentExam>
<jsp:attribute name="attr">
属性値です
</jsp:attribute>
<jsp:body>
タグBODY (<jsp:body>タグを使う!!)
</jsp:body>
</myTag:fragmentExam>
<hr/>
AFTER TAG
</body>
</html>
package com.snail.sjcwc;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.JspFragment;
public class FragmentExam extends BodyTagSupport {
private static final long serialVersionUID = 5584089467035326347L;
private JspFragment attr = null;
public void setAttr(JspFragment param) {
attr = param;
}
public JspFragment getAttr() {
return attr;
}
public int doStartTag() throws JspException {
try {
// JspFragment#invoke(Write out)で、HTMLにJSPフラグメント
// を出力。何回でも呼び出せる
getAttr().invoke(getAttr().getJspContext().getOut());
getAttr().getJspContext().getOut().print("(<jsp:attribute name=\"***\">を使う)<br/>");
// null を指定すると上記と同じ
getAttr().invoke(null);
getAttr().getJspContext().getOut().print("(<jsp:attribute name=\"***\">を使う)<br/>");
} catch (IOException e) {
e.printStackTrace();
return SKIP_BODY;
}
return EVAL_BODY_BUFFERED;
}
public int doAfterBody() throws JspException {
return SKIP_BODY;
}
public int doEndTag() throws JspException {
try {
pageContext.getOut().print(
"[[The tag body is \"" + bodyContent.getString() + "\".]]");
pageContext.getOut().flush();
} catch (IOException e) {
e = null;
}
return EVAL_PAGE;
}
}
Java SJC-WC JSP#tagFragment