天天看點

[Struts]使用tiles管理界面遇到困難

上個周末都在研究怎麼用tiles管理示範中心項目的界面,沒想到遇到了不少麻煩,到現在也沒解決。首先,示範中心項目有很多個子產品,我們是用struts的子產品功能分開的。本來想的是在預設子產品裡定義幾個公用的界面定義(definition),然後再各子產品裡都繼承這個定義,并修改必要的tile就可以了。沒想到不管怎麼設定,子產品裡的定義都繼承不到預設的定義。預設子產品裡:

[Struts]使用tiles管理界面遇到困難

<plug-in className="org.apache.struts.tiles.TilesPlugin" >

[Struts]使用tiles管理界面遇到困難

  <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />

[Struts]使用tiles管理界面遇到困難

</plug-in>

[Struts]使用tiles管理界面遇到困難

教師子產品裡:

[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難

  <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml,/WEB-INF/tiles-defs-teacher.xml" />

[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難

tiles-defs.xml裡:

[Struts]使用tiles管理界面遇到困難

<definition name="classicLayout" path="/layout/classic.jsp">

[Struts]使用tiles管理界面遇到困難

    <put name="header" value="/header.jsp" />

[Struts]使用tiles管理界面遇到困難

    <put name="menu" value="/teacher/list.do"/>

[Struts]使用tiles管理界面遇到困難

    <put name="main" value=""/>

[Struts]使用tiles管理界面遇到困難

    <put name="footer" value="/footer.jsp" /> 

[Struts]使用tiles管理界面遇到困難

</definition>

[Struts]使用tiles管理界面遇到困難

tiles-defs-teacher.xml裡:

[Struts]使用tiles管理界面遇到困難

<definition name="listLayout" extends="classicLayout">

[Struts]使用tiles管理界面遇到困難

    <put name="main" value="/teacher/list.jsp"/>

[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難

然後在教師子產品裡forward到listLayout,提示path沒有以"/"開頭,就是沒有找到listLayout這個定義了。我試了很多寫法,包括設定moduleAware的屬性,都沒有成功。

後來想就在每個子產品裡都寫classicLayout的定義吧,都指向同一個.jsp定義檔案就可以了。又遇到新問題,我想在teacher子產品裡顯示menu子產品裡的内容,會提示找不到所需資源,因為我是在teacher子產品裡,menu子產品的資源是無法訪的,除非在menu子產品的配置檔案裡指定key,再在.jsp檔案裡強制指定bundle的名稱,我覺得這個方法太不雅了,同時要做不少修改。

[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難

    <put name="menu" value="/menu/list.jsp"/>

[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難
[Struts]使用tiles管理界面遇到困難

還有,<put>裡的value隻能是.jsp嗎,用.do行不行,我試的結果是不行,雖然沒報任何錯誤,但頁面生成到那之前就截止了。郁悶!