代码之家  ›  专栏  ›  技术社区  ›  Chepech

SpringMVC-移动访问时更改视图

  •  11
  • Chepech  · 技术社区  · 14 年前

    我想知道是否有人已经解决了这个问题。我有一个 弹簧马力 应用程序和我们正在添加对 WebKIT 输入mobiles(基本上是iphone和android),所以我想知道有人找到了一种优雅的方式来定义特定的视图,这取决于发送请求的客户机。

    我知道一个简单的 如果 在控制器实现中可以做到这一点,但我正在寻找更灵活/更优雅的方法(具体的viewresolver实现,或者可能是拦截器)。

    非常感谢您的帮助…等于总是)


    这是一个相当古老的问题。你需要做的是利用 Spring-Mobile 以标准优雅的方式实现这一目标

    3 回复  |  直到 10 年前
        1
  •  9
  •   krlmlr    12 年前

    更新:看 spring-mobile

    原始答案:

    创建一个自定义 ViewResolver 它基于 User-Agent 标题。

    • here 是一个移动用户代理列表(从维基百科中删除的页面)。对照它检查标题,并解析移动视图。
    • 如果用户代理不是移动设备,则返回 null 从而让其他解析器解析视图。
    • 确保以正确的顺序定义解析程序(在SpringXML中),以便首先查询移动解析程序。
        2
  •  2
  •   Bart    11 年前

    就像@Bohzo和你自己已经说过,春天移动是一条路。

    从1.1版起,您可以使用 LiteDeviceDelegatingViewResolver 配置您描述的行为类型。

    设备感知视图管理

    http://static.springsource.org/spring-mobile/docs/current/reference/html/device.html#device-aware-view-management

    SpringMobile包括AbstractDeviceDelegatingViewResolver,一个抽象的ViewResolver包装,它委托给另一个视图冲突解决程序实现,允许解析设备特定的视图名称,而无需为每个视图定义专用映射。提供了一个轻量级的实现,它支持根据呼叫设备是普通的、移动的还是基于平板电脑的来调整视图名称。

    在您的应用程序中,您可以为普通、移动或平板设备创建备用视图,并在适当的配置下,Spring Mobile将调整视图名称以解析为正确的视图名称。这在内部发生,不需要通过控制器添加条件逻辑。

        3
  •  1
  •   Community CDub    8 年前

    好吧,我找到了一个更具体的答案。博佐提出的解决方案有问题。事实上, 可视解析器 无法再访问 httpservletrequest(httpservletrequest) . 有一个 way to access the request 但是它有点脏。

    也就是说,这是一个非常优雅和易于实现的 solution . 基本上,它涉及到一个定制的视图解析器(如bozho提议的那样),但是它添加了一个handlerInterceptor,将用户代理添加到模型中,这样您就不再需要手动添加它了。