Frage

Ich bin mit Struts Fliesen 1 erfolgreich, aber ich habe ein Problem entdeckt, wenn nisten Fliesen versuchen.

Im Moment habe ich ein Layout wie folgt:

Ich möchte eine andere Vorlage wie diese haben, für den Einsatz in ganz wenigen Benutzerseiten:

So möchte ich das erste Layout für den Anwender das Layout erweitern. In den Fliesen definiton Ich bin mit:

<definition name=".basic.layout" path="/WEB-INF/jsps/basicLayout.jsp">
    ....

<definition name=".user.layout" extends=".basic.layout">
    <put name="content" value="/WEB-INF/jsps/user/layout.jsp"/>
    ....

<definition name=".user.page" extends=".user.layout">
    <put name="userContent" value="/WEB-INF/jsps/user/page.jsp"/>
    ....

In user/layout.jsp ich versuche, in der Regel die Fliese zu zeigen, <tiles:get name="userContent"/> verwendet wird.

Und das Problem ist The requested resource (/WEB-INF/jsps/user/userContent) is not available

War es hilfreich?

Lösung 3

fand ich einige Informationen von hier

Diese Lösung für mich gearbeitet.

  

In diesem Fall in der Regel haben Sie   eine neue Definition erstellen verlauf   aus einem vorhandenen, füllen Sie den   Attribut in der richtigen Vorlage und   weisen Sie die neue Definition als   Attribut auf die Hauptvorlage.

     

Mit anderen Worten:

<definition name="product.nav" template="/productNavLayout.jsp">    
    <put-attribute name="productPathNav" value="/productPathNav.jsp" />    
    <put-attribute name="productNav" value="/productNav.jsp" />  
</definition> 

<definition name="product.nav.extended" extends="product.nav">    
    <put-attribute name="productContent" value="product.grid" />  
</definition> 

<definition name="page.products" extends="layout">
    <put-attribute name="content" value="product.nav.extended" />  
</definition>

Andere Tipps

Es gibt eine sauberere Lösung .

Ein weiterer Ansatz ist nur eine Definition zu verwenden (plus die defaultlayout Definition) in der Fliesen-def.xml Datei.

Fliesen-def.xml :

<definition name="defaultLayout" template="/WEB-INF/layout.jsp">
    <put name="header" value="/WEB-INF/header.jsp" />
    <!-- definitions based on this layout must define "body"  -->
    <put name="footer" value="/WEB-INF/footer.jsp" />
</definition>

<definition name="editPage" extends="defaultLayout">
    <put name="body" value="/WEB-INF/editBody.jsp" />
    <put name="a" value="/WEB-INF/a.jsp" />
    <put name="b" value="/WEB-INF/b.jsp" />
</definition>

layout.jsp :

<tiles:insert attribute="header">
  <tiles:insert attribute="body" >
      <!-- propogate "a" and "b" down to the next level -->
      <tiles:put name="a" beanName="a"/>
      <tiles:put name="b" beanName="b"/>
  </tiles:insert>
<tiles:insert attribute="footer">

editBody.jsp :

<table>
   <tr>
      <td><tiles:insert attribute="a"/></td>
      <td><tiles:insert attribute="b"/></td>
   </tr>
</table>

Der Nachteil dieses Ansatzes ist, dass layout.jsp die Liste der möglichen Argumente wissen müssen (any) body.jsp Seite.

Es ist schon lange eine Weile her, seit ich verwendet habe, Struts Tiles, aber sollten Sie nicht verwenden <tiles:insert> statt <tiles:get>

Das heißt, so etwas wie:

<tiles:insert attribute="userContent" flush="false"/>

Ich kann aus Ihrer Frage sehen Sie verschiedene Namen für den Inhalt Attribut verwenden. Es ist content für user.layout und userContent für user.page.

Können Sie versuchen, den gleichen Namen entweder content oder userContent für dieses Attribut zu verwenden?

Hope, das hilft.

Aktualisieren. Dies ist eine schnelle Hack-Lösungen. Sie können für Fliesen-Attribut auf true eingestellt ignorieren verwenden: Operation erhalten. Es wird still gehen, wenn kein userContent definiert.

Aber ich denke, das ist etwas nicht in Ordnung ist mit Fliesen Definitionen.

Die Fehlermeldung deutet darauf hin, dass Sie versuchen, Ziegel zu verwenden, die nicht definiert ist. Ich ein Beispiel kompiliert, wenn .user.layout eine Erweiterung von .basic.layout ist. Der Unterschied zwischen beiden ist ein Körperteil.

<definition name=".basic.layout" path="/WEB-INF/jsps/basicLayout.jsp">
   <put name="header" value="/WEB-INF/jsps/header.jsp"/>
   <put name="content" value="/WEB-INF/jsps/basicLayout.jsp"/>
   <put name="footer" value="/WEB-INF/jsps/footer.jsp"/>
</definition> 

<!-- extending content part of basic layout -->
<definition name=".user.content" value="/WEB-INF/jsps/user/layout.jsp">
   <put name="userContent" value="/WEB-INF/jsps/user/page.jsp"/>
</definition>

<!-- defining new layout -->
<definition name=".user.layout" extends=".basic.layout">
  <put name="content" value=".user.content"/>
</defnition>

<definition name=".user.page" extends=".user.layout">
  <put name="userContent" value="/WEB-INF/jsps/page.jsp"/>
</definition>

<definition name=".user.info" extends=".user.layout">
  <put name="userContent" value="/WEB-INF/jsps/userInfo.jsp"/>
</definition>

<definition name=".other.page" extends=".basic.layout">
  <put name="content" value="/WEB-INF/jsps/other.jsp"/>
</definition>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top