Including JSP page into another JSP page, how to avoid multiple HEAD / BODY sections?

前端 未结 4 968
逝去的感伤
逝去的感伤 2021-01-14 13:17

I would like to include a JSP page into another JSP page. Let\'s say that I have master.jsp that is including slave.jsp.

As slave.jsp

相关标签:
4条回答
  • 2021-01-14 13:48

    I went for this solution by passing a parameter when including the page.

    in master.jsp

    <head>
      blablabla
      <c:import url="slave.jsp">
        <c:param name="sectionName" value="HEAD" />
      </c:import>
    </head>
    <body>
      blablabla
      <c:import url="slave.jsp">
      </c:import>
    </body>
    

    and then in slave.jsp the parameter is read and the custom part of the page is rendered.

    <c:choose>
      <c:when test="${param.sectionName == 'HEAD'}">
         head section here [without the <HEAD> tags !]
      </c:when>
      <c:otherwise>
         body section here [without the <BODY> tags !]
      </c:otherwise>
    </c:choose>
    

    not too nice to see but working. In this way I am able to remove the duplication of HEAD and BODY parts.

    0 讨论(0)
  • 2021-01-14 13:51

    You cannot and should not merge two <html> documents in each other. This would produce invalid output. Better include CSS/JS conditionally with help of JSTL c:if or c:choose tags.

    Basic example:

    <head>
        <script type="text/javascript" src="global.js"></script>
        <c:if test="${isAdminPage}">
            <script type="text/javascript" src="admin.js"></script>
        </c:if>
    </head>
    
    0 讨论(0)
  • 2021-01-14 13:52

    Outside of sitemesh, you're pretty much out of luck. However I would reconsider your design if you think that the setup per page is impractical. How many pages will your app have?

    0 讨论(0)
  • 2021-01-14 13:57

    You could also extend the conditional option, and make a meta.jsp (for example), which contains a Map for each of the head elements - meta tags, css hrefs, script hrefs, and use the name of the jsp as a key in that Map. Then you call request.getRequestURI(), and show whatever you have put in the map under that key. Not a very beautiful solution, but working.

    0 讨论(0)
提交回复
热议问题