可以包括一个jsp在一个自定义TagSupport类,并指定该机构应该去吗?

StackOverflow https://stackoverflow.com/questions/533405

  •  22-08-2019
  •  | 
  •  

我想要使用定义jsp标签,以帮助建立一个菜单在我的应用程序。然而,我希望所有的实际HTML生活在JSP文件,而不是在Java类。

因此,假设我有一个标签这样的:

<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类),你应该能够达到同样的目的,但与更清洁的方式,用代码和演示一个好得多的分离。

其他提示

如果每一页上在你的网络应用程序的需要相同的菜单,然后你可以考虑 瓷砖, 为定义 复合风景

像...

您可以创建自定义标签

<强> template.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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top