我刚刚设置了一个带有spring-mobile和apache-tiles的新应用程序,我打算使用tile描述符来帮助我在目标平台之间重用视图组件。我想知道是否有人已经完成了这个以及构建应用程序的最佳方法。在过去使用瓷砖时,瓷砖描述符非常快速地添加,将移动和平板电脑添加到混合中,我可以轻松地增加两倍。
到目前为止,我有一个主拼贴定义WEB-INF/layout/tiles.xml
,在这个区域有三个布局:
<tiles-definitions>
<definition name="layoutStandard" template="/WEB-INF/layout/standard.jsp"/>
<definition name="layoutMobile" template="/WEB-INF/layout/mobile.jsp"/>
<definition name="layoutTablet" template="/WEB-INF/layout/tablet.jsp"/>
</tiles-definitions>
然后查看定义。
<tiles-definitions>
<definition name="home" extends="layoutStandard">
<put-attribute name="body" value="/WEB-INF/views/home.jsp" />
</definition>
<definition name="home.mob" extends="layoutMobile">
<put-attribute name="body" value="/WEB-INF/views/home.mob.jsp" />
</definition>
<definition name="home.tab" extends="layoutTablet">
<put-attribute name="body" value="/WEB-INF/views/home.tab.jsp" />
</definition>
</tiles-definitions>
我已针对mobileSuffix
配置了tabletSuffix
和LiteDeviceDelegatingViewResolver
,因此我的控制器中没有太多头疼,如果我不喜欢enableFallback
设置的话不提供移动视图定义。
有没有办法可以用瓷砖配置做类似的事情?即如果视图名称以.mob
结尾,那么使用layoutMobile
而不是多次定义它?
答案 0 :(得分:0)
我只是做了以下事情:
添加到applicationContext.xml
<mvc:interceptors>
<bean class="org.springframework.mobile.device.mvc.DeviceResolvingHandlerInterceptor" />
</mvc:interceptors>
添加到tilesDefinition.xml
n.b。需要tiles.el.jar
<definition name="store" templateExpression="/jsp/home${layout}.jsp">
...
<definition name="page" extends="store">
...
添加到控制器
我为我的所有控制器使用单一方法,为我的所有页面类型提取默认数据。
if (!device.isNormal() || sitePreference.isMobile()) {
if (!sitePreference.isNormal()) {
layout = "-mobile";
}
}
我只使用手机,但你应该能够调整它以适用于手机或平板电脑。
我希望这会有所帮助。