减少在Apache Tiles中添加新视图所需的配置

时间:2013-05-20 12:58:07

标签: jsp java-ee spring-mvc template-engine tiles2

我搜索有关如何减少Tiles添加的一些样板的想法。以下是我的项目组织方式。

在我的spring-mvc配置中,我通过这种方式配置了Tiles:

...

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer" id="tilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/layouts/layouts.xml</value>
            <!-- Scan views directory for Tiles configurations -->
            <value>/WEB-INF/views/**/views.xml</value>
        </list>
    </property>
</bean>

...

我在/WEB-INF/layouts/layouts.xml中定义的主要布局:

...

<definition name="default" template="/WEB-INF/layouts/default.jspx">
    <put-attribute name="header" value="/WEB-INF/views/general/header.jspx" />
    <put-attribute name="footer" value="/WEB-INF/views/general/footer.jspx" />
</definition>

...

...并且使用的模板(/WEB-INF/layouts/default.jspx)与此类似:

...

<tiles:insertAttribute name="header" ignore="true" />
    <div id="main">
        <tiles:insertAttribute name="body" />
    </div>
<tiles:insertAttribute name="footer" ignore="true" />

...

我可能从spring config中猜到实际的视图定义位于“/ WEB-INF / views”

我在“/ WEB-INF / views”下也有一些子文件夹,以保持我的观点有条理。

一般情况下,添加视图我必须:

  1. 添加位于“/ WEB-INF / views / {category} / {viewname} .jspx”的模板

  2. 通过添加新定义更新/WEB-INF/views/{category}/views.xml:

    ...
    
    <definition extends="default" name="{category}/{viewname}">
        <put-attribute name="body" value="/WEB-INF/views/{category}/{viewname}.jspx"/>
    </definition>
    

  3. 正如您所看到的,我在大多数定义中使用的唯一属性是“body”,它的值与模板和视图名称的位置相关。

    随着时间的推移,重构/维护这些视图变得更加困难,所以我正在寻找某种简化来定义它们。

    所以我的问题听起来像这样:是否有可能让瓷砖根据模板名称/位置发现视图定义?该定义应使用相关的jspx作为“body”(或任何其他属性)并具有相应的名称。

    例如,放置jsps:/WEB-INF/views/general/login.jspx

    这样的事情应该由瓷砖自动定义:

    <tiles-definitions>
    
        ...
    
        <definition extends="default" name="general/login">
            <put-attribute name="body" value="/WEB-INF/views/general/login.jspx"/>
        </definition>
    
    </tiles-definitions>
    

1 个答案:

答案 0 :(得分:3)

此样板配置是瓷砖挂起1天。引入通配符时,tile-2实际上没有必要,尤其是tile-3和OptionsRenderer。

这是一个可以帮助您的tutorial

  • spring to tiles integration,
  • 带通配符的定义,
  • 使用OptionsRenderer和
  • 实现回退模式
  • 定义组成。