如何使用视图解析器返回移动或普通视图?

时间:2014-06-11 07:51:10

标签: java spring spring-mvc spring-mobile

我有一个网络应用程序,我想要添加移动版本..

所以我跟着this guide添加了spring-mobile,但我无法获得移动视图..

我不想在这段代码中添加每个控制器的方法:

if (device.isMobile()) {
  return "mobile/myPage.jspx";
} else if (device.isTablet()) {
  return "tablet/myPage.jspx";
} else {
  return "myPage.jspx";
}

所以我试图设置一个视图解析器来获得正确的页面。 我使用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.mobile.device.view.LiteDeviceDelegatingViewResolver">
  <constructor-arg>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/views/" />
      <property name="suffix" value=".jsp" />
    </bean>
  </constructor-arg>
  <property name="tabletPrefix" value="tablet/" />
</bean>

但我的we-app仅返回/myPage.jspx,而不会返回/mobile/tablet页。

我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:4)

那不会起作用。如果视图存在与否,UrlBasedViewResolver始终返回视图。另外,您的UrlBasedViewResolver总是先咨询,基本上会使您的LiteDeviceDelegatingViewResolver无用。

您还必须让您的移动视图使用Tiles,并确保配置的前缀导致修改后的视图。我还建议使用TilesViewResolver便利子类,保存一些XML。

<bean class="org.springframework.mobile.device.view.LiteDeviceDelegatingViewResolver">
    <constructor-arg>
        <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" />
    </constructor-arg>
    <property name="mobilePrefix" value="mobile/" />
    <property name="tabletPrefix" value="tablet/" />
</bean>

并且当然删除您配置的其他ViewResolver