1

我刚刚使用 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>

我已经进行了配置mobileSuffixtabletSuffix反对LiteDeviceDelegatingViewResolver,所以我的控制器没有太多令人头疼的问题,enableFallback如果我不提供移动视图定义,它也可以很好地工作。

有没有办法可以对瓷砖配置做类似的事情?即如果视图名称以.mob然后使用layoutMobile而不是必须多次定义它结束?

4

1 回答 1

0

我只是做了以下事情:

添加到 applicationContext.xml

<mvc:interceptors>
    <bean class="org.springframework.mobile.device.mvc.DeviceResolvingHandlerInterceptor" />
</mvc:interceptors>

添加到tilesDefinition.xml

nb 需要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";     
  }
}

我只使用手机,但你应该可以调整它以适用于手机或平板电脑。

我希望这有帮助。

于 2013-02-28T19:32:23.910 回答