を含めることができますjspカスタムTagSupportクラスの指定ができるようなのでしょう。
質問
使いたいカスタムjspタグの形成に貢献していくためのメニュー私の願います。したいと思っていて、実際のHTMLを生JSPファイルは、Javaのクラスです。
そうしているaタグのようになります:
<mytags:Menu>
<mytags:MenuItem name="foo"/>
<mytags:MenuItem name="bar"/>
<mytags:MenuItem name="baz"/>
</mytags:Menu>
それが、私のクラス Menu
タグは、以下のようなものです:
public class MenuPill extends TagSupport {
public int doStartTag() throws JspException {
try {
pageContext.include("/menu/menu.jsp");
} catch (ServletException e) {
throw new JspException(e);
} catch (IOException e) {
throw new JspException(e);
}
return super.doStartTag();
}
}
私 menu.jsp
ファイルは、ラッパーのためのメニュー、そしてこのような
<div id="menu>
<%somehow include the body here%>
</div>
いきたいと思い入れの身体の mytags:Menu
タグまでのHTMLを生成します実際のメニュー項目への menu.jsp
, の開閉まることが期待される。思いものでは次の二つの異なるjspファイルは、開始タグと終了タグがずさんな.
できるのか?
よろしく!
解決
私は本当にあなたが JSP 2.0タグファイルを使用することをお勧めの代わりにあなたが提案するアプローチの。 JSP 2.0タグファイルは、あなたが記述のような問題に対処するために作成されました。 JSTLと組み合わせること(そしておそらくJavaのクラスそれは本当に複雑だ場合)、あなたが同じ目的を達成することができるはずですが、非常にクリーンな手段で、コードとプレゼンテーションの非常に良く分離してます。
他のヒント
、あなたは定義するために、タイルに検討するかもしれません< href = "http://tiles.apache.org/framework/tutorial/pattern.html" のrel = "nofollowをnoreferrer">
のコンポジットビュー>を作成できますカスタムタグのように...
テンプレートを作成します。tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>template</short-name>
<uri>/template</uri>
<tag-file>
<name>block</name>
<path>/META-INF/tags/template/block.tag</path>
</tag-file>
<tag-file>
<name>stringBlock</name>
<path>/META-INF/tags/template/stringBlock.tag</path>
</tag-file>
</taglib>
実施
<%@tag import="org.mentawai.template.*" pageEncoding="UTF-8"%>
<%@attribute name="id" required="true"%>
<%
Page page = (Page)request.getAttribute(TemplateServlet.PAGE_ATTR);
Page block = page.getBlock(id);
String view = "";
if (block == null) {
throw new ServletException("Block " + id + " doesn't exists");
}
request.setAttribute(TemplateServlet.PAGE_ATTR, block);
view = block.getView();
TemplateServlet.executeListener(block, request, response, application);
String oldView = (String)request.getAttribute("_view");
request.setAttribute("_view", "/" + view);
%>
<jsp:include page="${_view}" flush="true"/>
<%
request.setAttribute("_view", oldView);
request.setAttribute(TemplateServlet.PAGE_ATTR, page);
%>
参考:http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html