我寻找有关如何减少 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”下也有一些子文件夹,以保持我的观点井井有条。
在一般情况下添加视图我必须:
添加位于“/WEB-INF/views/{category}/{viewname}.jspx”的模板
通过添加新定义来更新 /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>