2015-07-13 2 views
3

У меня есть следующая структура на многих страницах моего веб-приложения. Я хотел бы создать страницу шаблона с фиксированным кодом до и после кода страницы, а затем поместить мой код для каждой другой страницы. Проблема в том, что я должен вырезать div s в разных файлах.JSP include, код импорта после и до

<!-- fixed jsp code 
    <header> 
    <imports> ... 
    <div id="some-fixes-divs-inside"> 
--> 

    page code 

<!-- fixed jsp code 
    </div> 
    <other> 
    <footer> 
--> 

Единственный способ я знаю, что будет что-то вроде этого, но я думаю, что это не очень хорошая практика, чтобы сократить div S:

<jsp:include page="fixed-jsp-code-head.jsp" /> 
    my page code 
<jsp:include page="fixed-jsp-code-footer.jsp" /> 

Q1: Есть ли какие-либо директивы или что-то в JSP или любые другие рамки для этого?

Q2: Если первый Q нет, это мое решение - плохая практика?

Edit: Я хотел бы знать, если есть любая директива, как <import>mycode</import> иметь в шаблоне всего код колонтитул и заголовок и не открывать в заголовке тот же div и закрыть его в футере , и поместите мой код внутри шаблона.

ответ

2

Вы также можете использовать Apache Tiles. Это шаблонная структура. Как this.

Прежде всего, определить шаблон:

<definition name="myapp.homepage" template="/layouts/classic.jsp"> 
    <put-attribute name="header" value="/tiles/banner.jsp" /> 
    <put-attribute name="menu" value="/tiles/common_menu.jsp" /> 
    <put-attribute name="body" value="/tiles/home_body.jsp" /> 
    <put-attribute name="footer" value="/tiles/credits.jsp" /> 
</definition> 

И после этого использовать его в коде:

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> 
<table> 
    <tr> 
    <td colspan="2"> 
     <tiles:insertAttribute name="header" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <tiles:insertAttribute name="menu" /> 
    </td> 
    <td> 
     <tiles:insertAttribute name="body" /> 
    </td> 
    </tr> 
    <tr> 
    <td colspan="2"> 
     <tiles:insertAttribute name="footer" /> 
    </td> 
    </tr> 
</table> 
+0

Спасибо, это именно то, что я искал Q1. –

1

Если первый вопрос Q - это мое решение - плохая практика?

По моему мнению, разделение jsps согласно соответствующим функциям является хорошей практикой. Это делает ваш код слабо связанным. В будущем, если вам нужно изменить код заголовка/нижнего колонтитула, вам нужно будет только изменить его в одном месте, уменьшив массу переделок.

Q1: Есть ли какая-либо директива или что-то в jsp или какой-либо другой структуре ?

Стандартный способ включения JSP в другой JSP использует

<%@include file="your jsp"/> (статический включить) или

<jsp:include page="fixed-jsp-code-footer.jsp" /> (динамическая включают)

Вы также можете использовать JSTL тег

`<c:import url=”http://www.example.com/foo/bar.html” />` (dynamic include) 

Он очень похож, но он более мощный и гибкий: в отличие от двух других, URL может быть извне веб-контейнера!

+0

Спасибо за ответ. Static include быстрее, чем динамический, и c: import более мощный, но также более тяжелый, поэтому я бы использовал его только в том случае, если мне нужны дополнительные функции. Но моя проблема заключается в разделении DIV между двумя файлами. В заголовке я должен открыть его, а в нижнем колонтитуле я должен закрыть.Я хотел бы знать, есть ли какая-либо директива, например mycode , чтобы иметь в шаблоне весь нижний колонтитул и заголовок кода. –

Смежные вопросы