사용자 정의 태그 업퍼 클래스에 JSP를 포함시키고 본체가 어디로 가야하는지 지정할 수 있습니까?

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

  •  22-08-2019
  •  | 
  •  

문제

사용자 정의 JSP 태그를 사용하여 응용 프로그램에서 메뉴를 작성하는 데 도움이됩니다. 그러나 모든 실제 HTML이 Java 클래스가 아닌 JSP 파일에 살기를 원합니다.

따라서 다음과 같은 태그가 있다고 가정 해 봅시다.

<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 클래스)과 결합하여 동일한 끝을 달성 할 수 있어야하지만 훨씬 더 깨끗한 수단으로 코드와 프리젠 테이션이 훨씬 더 잘 분리되어 있어야합니다.

다른 팁

WebApp의 모든 페이지에 동일한 메뉴가 필요한 경우 타일, 정의를 위해 복합보기

당신은 다음과 같이 사용자 정의 태그를 만들 수 있습니다.

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