1

我寻找有关如何减少 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>
    

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

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

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

例如,放置 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>
4

1 回答 1

3

这个样板配置是从 tile-1 天开始的。当引入通配符时,对于tiles-2 确实没有必要,尤其是对于tiles-3 和OptionsRenderer。

这里有一个教程可以帮助你

  • 弹簧到瓷砖集成,
  • 带有通配符的定义,
  • 使用 OptionsRenderer 实现回退模式,以及
  • 定义组成。
于 2013-05-27T07:33:26.450 回答