سؤال

أنا أستخدم بلاط الدعامات 1 بشكل ناجح ، لكنني واجهت مشكلة عند محاولة عش البلاط.

لدي حاليا تخطيط مثل ذلك:

أرغب في الحصول على قالب آخر مثل هذا ، لاستخدامه في عدد قليل من صفحات المستخدم:

لذلك أود تمديد التصميم الأول لتخطيط المستخدم. في البلاط Definiton أنا أستخدم:

<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"/>
    ....

في user/layout.jsp أحاول إظهار البلاط عادة ، باستخدام <tiles:get name="userContent"/>.

والمشكلة هي The requested resource (/WEB-INF/jsps/user/userContent) is not available

هل كانت مفيدة؟

المحلول 3

لقد وجدت بعض المعلومات من هنا

عملت هذا الحل بالنسبة لي.

في هذه الحالة ، عادةً ما يتعين عليك إنشاء تعريف جديد يمتد من تعريف موجود ، واملأ السمة في القالب الصحيح وتعيين التعريف الجديد كسمة للقالب الرئيسي.

بعبارات أخرى:

<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>

نصائح أخرى

هناك محلول أنظف.

طريقة أخرى هي استخدام تعريف واحد فقط (بالإضافة إلى تعريف DefaultLayout) في Tiles-def.xml ملف.

Tiles-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>

التصميم:

<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>

الجانب السلبي لهذا النهج هو أن التخطيط.

لقد مر وقت طويل منذ أن استخدمت بلاط الدعامات ، لكن لا ينبغي أن تستخدم <tiles:insert> بدلاً من <tiles:get>?

هذا شيء مثل:

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

أنا كما أستطيع أن أرى من سؤالك ، تستخدم أسماء مختلفة لسمة المحتوى. أنه content لـ user.layout و userContent للمستخدم. صفحة.

هل يمكنك محاولة استخدام نفس الاسم لتلك السمة أيضًا content أو userContent?

أتمنى أن يساعدك هذا.

تحديث.هذا هو حلول الاختراق السريعة. يمكنك استخدام تجاهل مجموعة السمات إلى True for Tiles: Get Operation. سوف يذهب بصمت عندما لا يتم تعريف USERCONTENT.

لكنني أعتقد أن هذا خطأ في تعريفات البلاط.

تشير رسالة الخطأ إلى أنك تحاول استخدام البلاط الذي لم يتم تعريفه. قمت بتجميع مثال متى .user.layout هو امتداد .basic.layout. الفرق بين اثنين هو جزء الجسم.

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top