SpringMVC - изменение вида при доступе через Mobile

Мне было интересно, кто-то уже решил это. У меня есть приложение SpringMVC, и мы добавляем поддержку WebKit типов мобильных телефонов (iPhone и Android в основном), поэтому мне было интересно, кто-то нашел элегантный способ определения определенных просмотров в зависимости от клиент, отправивший запрос.

Я знаю, что простая, если в реализации Controller может сделать трюк, но я ищу что-то более гибкое/изящное (возможно, конкретная реализация ViewResolver или перехватчик).

Помощь будет очень признательна... как всегда =)


Это довольно старый вопрос. Что вам нужно сделать, это использовать Spring-Mobile, чтобы достичь этого в стандартной элегантной манере

Ответ 1

Хорошо, я нашел более конкретный ответ. Существует проблема с решением, предложенным Божо. тот факт, что ViewResolvers больше не имеет доступа к HttpServletRequest. Существует способ доступа к запросу, но его вид грязного ИМХО.

Итак, это очень элегантно и легко реализовать решение. В основном он включает в себя пользовательский ViewResolver (как предложил Божо), но он добавляет обработчик HandterInterceptor, который добавляет User-Agent к модели, поэтому вам больше не нужно добавлять его вручную.

Ответ 2

Обновление: посмотрите spring-mobile

Оригинальный ответ:

Было бы довольно просто создать пользовательский ViewResolver, который разрешает представления на основе заголовка User-Agent.

  • здесь - список мобильных пользовательских агентов (страница удалена из википедии). Проверьте заголовок против него и разрешите мобильный просмотр.
  • если пользователь-агент не является мобильным, верните null, тем самым разрешив другим преобразователям разрешение.
  • убедитесь, что ваши определители определены (в spring xml) в правильном порядке, чтобы сначала разрешить мобильный преобразователь.

Ответ 3

Как и @Bohzo, и вы уже сказали, что spring -мобильный - это путь.

Начиная с версии 1.1 вы можете использовать LiteDeviceDelegatingViewResolver, чтобы настроить тип поведения, которое вы описываете.

Управление устройством Aware View

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

Spring Mobile включает абстрактную оболочку AbstractDeviceDelegatingViewResolver, абстрактную оболочку ViewResolver, которая делегирует другую реализацию разрешения представления, позволяющую разрешать имена имен конкретных устройств, не требуя определения выделенного сопоставления для каждого представления. Предусмотрена легкая реализация, которая поддерживает настройку имен имен на основе того, является ли вызывающее устройство обычным, мобильным или планшетом.

В своем приложении вы можете создавать альтернативные представления для обычных, мобильных или планшетных устройств и при правильной конфигурации Spring Mobile отрегулирует имя представления, чтобы оно было правильным. Это происходит внутри, без необходимости добавлять условную логику через контроллеры.