Tiles, dziedziczenie definition i konfiguracja layout`ów

0

Cześć,

Mam mały problem z konfiguracją apache tiles. Mianowicie chciałbym mieć taką strukturę :

  • base.layout.jsp
    -- main.layout.jsp
    -- auth.layout.jsp

W base.layout.jsp chcę mieć wszystkie css oraz js.
main.layout.jsp główny layout po zalogowaniu się przez użytkownika
auth.layout.jsp layout do logowania, rejestracji, itp.

plik tiles.xml:

 
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>
    <definition name="base.definition" template="/WEB-INF/views/jsp/base.layout.jsp">
        <put-attribute name="title" value="" />
        <put-attribute name="meta.description" value="" />
        <put-attribute name="meta.keywords" value="" />
        <put-attribute name="meta.author" value=""/>
        <put-attribute name="body.class" value="" />
    </definition>

    <definition name="login.layout.definition" extends="base.definition">
        <put-attribute name="title" value="" />
        <put-attribute name="body" value="/WEB-INF/views/jsp/auth.layout.jsp" />
    </definition>

    <definition name="authorization/login" extends="login.layout.definition">
        <put-attribute name="content" value="/WEB-INF/views/jsp/authorization/login.jsp" />
    </definition>
</tiles-definitions>

plik base.layout.jsp (nie będę całego wrzucał)

    //ładownanie css, js, meta tagi, itp...
    <body class="<tiles:getAsString name="body.class" defaultValue="login" />">
        <tiles:insertAttribute name="body" />
    </body>

Plik auth.layout.xml

<tiles:putAttribute name="body.class" value="login" />
<div class="row">
        <tiles:insertAttribute name="content" /> // W tym miejscu chciałbym aby ładować poszczególne widoku(login, registration, ...)
</div>

Niestety wyskakuje mi exception:
org.apache.tiles.template.NoSuchAttributeException: Attribute 'content' not found.

Czy byłby ktoś wstanie pomóc rozwiązać problem bądź wytłumaczyć jak do tego się zabrać prawidłowo ?

0

Zmieniłem swój plik tiles.xml na:

<tiles-definitions>
    <definition name="base.definition" template="/WEB-INF/views/jsp/base.layout.jsp">
        <put-attribute name="body" value="" />
    </definition>

    <definition name="auth.definition" extends="base.definition" >
        <put-attribute name="body" value="/WEB-INF/views/jsp/auth.layout.jsp" />
    </definition>

    <definition name="authorization/login" extends="auth.definition">
        <put-attribute name="content" value="/WEB-INF/views/jsp/authorization/login.jsp" />
    </definition>
</tiles-definitions>

W auth.layout.jsp mam atrybut content, ale wyskakuje exception:
org.apache.tiles.template.NoSuchAttributeException: Attribute 'content' not found.

0

Problem rozwiązany,

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <!-- Wcześniej była wersja 2.0 i nie widział znaczników 'cascade' -->
<tiles-definitions>
    <definition name="base.definition" template="/WEB-INF/views/jsp/base.layout.jsp" />

    <definition name="auth.definition" extends="base.definition" >
        <put-attribute name="body" value="/WEB-INF/views/jsp/auth.layout.jsp" cascade="true" />
    </definition>

    <definition name="authorization/login" extends="auth.definition">
        <put-attribute name="body.class" value="login" cascade="true" />
        <put-attribute name="content" value="/WEB-INF/views/jsp/authorization/login.jsp" cascade="true"  />
    </definition>
</tiles-definitions>
1

Problem rozwiązany,

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <!-- Wcześniej była wersja 2.0 i nie widział znaczników 'cascade' -->
<tiles-definitions>
    <definition name="base.definition" template="/WEB-INF/views/jsp/base.layout.jsp" />

    <definition name="auth.definition" extends="base.definition" >
        <put-attribute name="body" value="/WEB-INF/views/jsp/auth.layout.jsp" cascade="true" />
    </definition>

    <definition name="authorization/login" extends="auth.definition">
        <put-attribute name="body.class" value="login" cascade="true" />
        <put-attribute name="content" value="/WEB-INF/views/jsp/authorization/login.jsp" cascade="true"  />
    </definition>
</tiles-definitions>

1 użytkowników online, w tym zalogowanych: 0, gości: 1