проблема с компоновкой apache + tile2 - PullRequest
1 голос
/ 04 апреля 2011

У меня есть следующий файл конфигурации плиток

<tiles-definitions>
    <definition name="base" template="/includes/layout.jsp">
        <put-attribute name="header" value="/includes/header.jsp" />
        <put-attribute name="menu" value="/includes/menu.jsp" />
        <put-attribute name="footer" value="/includes/footer.jsp" />
    </definition>
    <definition name="home" extends="base">
        <put-attribute name="contentBody" value="/home/view.jsp" />
    </definition>
</tiles-definitions>

, и для отображения страницы "view.jsp" у меня есть другая страница с именем "home.jsp", и она имеет следующий код (только)

// home.jsp

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="home" />

, и проблема здесь в том, что если я хочу загрузить страницу «edit.jsp» с тем же макетом, мне нужно повторить эту часть в tile.xml

<definition name="editbase" extends="base">
            <put-attribute name="contentBody" value="/home/edit.jsp" />
</definition>

и создайте файл с именем «editbase.jsp» и вызовите его.(повторяя приведенный выше код)

Мне просто интересно, это правильный путь, или я могу сделать что-то вроде

<tiles-definitions>
        <definition name="base" template="/includes/layout.jsp">
            <put-attribute name="header" value="/includes/header.jsp" />
            <put-attribute name="menu" value="/includes/menu.jsp" />
            <put-attribute name="footer" value="/includes/footer.jsp" />
        </definition>
        <definition name="home" extends="base">
            <put-attribute name="contentBody" value="/home/view.jsp" />
            <put-attribute name="contentBody" value="/home/edit.jsp" />  
        </definition>
</tiles-definitions> 

и загрузить страницу соответственно ... Я думаю, мой вопрос ясен

Я использую Apache тайлы 2.2.2

заранее спасибо

ура

Sameera

1 Ответ

1 голос
/ 04 апреля 2011

Если у вас не много разных заголовков / нижних колонтитулов / меню, вы можете упростить /includes/layout.jsp, поместив заголовок, нижний колонтитул и код меню прямо в него.Затем используйте <tiles:insert> для вставки фактического содержимого страницы: -

/ includes / layout.jsp

<html>
    <head>
        ...
    </head>
    <body>
        <!-- put your header code here -->
        ...

        <!-- put your menu code here -->
        ...

        <tiles:insert attribute="contentBody" />        

        <!-- put your footer code here -->
        ...
    </body>
</html>

tile-defs.xml

Создайте атрибут с именем contentBody .

<tiles-definitions>
    <definition name="base" template="/includes/layout.jsp">
        <!-- Create a contentBody with no value -->
        <put name="contentBody" value="" />
    </definition>

    <definition name="view" extends="base">
        <!-- Override base's contentBody -->
        <put name="contentBody" value="/home/view.jsp" />
    </definition>

    <definition name="edit" extends="base">
        <!-- Override base's contentBody -->
        <put name="contentBody" value="/home/edit.jsp" />
    </definition>       
</tiles-definitions>

В ваших файлах просмотра JSP не будет тегов тайлов, поскольку размещение этих тегов в средствах просмотра делает ваш макет оченьжесткая и навязчивая ... с этой проблемой вы столкнулись сейчас.Вместо этого поместите только фактическое содержимое в файлы средства просмотра.Они будут автоматически включены <tiles:insert> из файла макета.

struts-config.xml

Если вы используете Struts, имя определения view и edit должен соответствовать пути в вашей конфигурации Struts, например: -

    <action path="/bla" type="..." name="FrmReport" scope="request">
        <!-- path "view" must match tiles definition name -->
        <forward name="success" path="view"></forward>
    </action>

Таким образом, Tiles автоматически украсит вашу страницу, прежде чем страница отобразится на экране..

...