Включение страницы JSP в другую страницу JSP, как избежать нескольких разделов HEAD/BODY?
-
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()
, и покажите все, что вы поместили на карту под этим ключом.Не очень красивое решение, но рабочее.