Включение страницы JSP в другую страницу JSP, как избежать нескольких разделов HEAD / BODY?

Я хотел бы включить страницу JSP в другую страницу JSP. Допустим, у меня есть master.jsp это в том числе slave.jsp,

Как slave.jsp имеет свой <head> раздел для работы с JavaScript и CSS, есть ли способ или, возможно, другой метод для объединения masterа также slave Заголовок раздел в один? Также то же самое должно быть сделано для секции ТЕЛА.

Я недавно использовал sitemesh, но я думаю, что нецелесообразно настраивать шаблон для каждой страницы.

4 ответа

Решение

Я пошел на это решение, передав параметр при включении страницы.

в 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>

а затем в slave.jsp параметр считывается и настраивается пользовательская часть страницы.

<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>

не слишком приятно видеть, но работает. Таким образом, я могу удалить дубликаты HEAD а также BODY частей.

Вы не можете и не должны объединять два <html> документы друг в друга. Это приведет к неверному выводу. Лучше включить CSS/JS условно с помощью JSTL c:if или же c:choose теги.

Основной пример:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>

За пределами сайта, вам почти не повезло. Однако я бы пересмотрел ваш дизайн, если вы считаете, что настройка на страницу нецелесообразна. Сколько страниц будет в вашем приложении?

Вы также можете расширить условную опцию и сделать meta.jsp (например), который содержит Map для каждого из элементов head - метатеги, css hrefs, script hrefs и используйте имя jsp в качестве ключа на этой карте. Тогда вы звоните request.getRequestURI()и покажите все, что вы положили в карту под этим ключом. Не очень красивое решение, но работает.

Другие вопросы по тегам