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

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

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

в мастер.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>

а затем в раб.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>

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top