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