2012-01-13 4 views
1

Мне интересно, пытались ли вы сделать мобильную версию контроллера?Grails: мобильная версия контроллера

В настоящее время я расширяю GrailsLayoutDecoratorMapper с помощью своего собственного MobileDecoratorMapper, который применяет layout.mobile.gsp, если обнаружен мобильный телефон, и я хотел бы сделать что-то подобное для некоторых контроллеров. Моя идея - проверить фильтр, если есть мобильная версия контроллера (например, SomethingControllerMobile или SomethingController.mobile.groovy), и если это так перенаправить на него вместо стандартного SomethingController.

Причина в том, что я хотел бы избежать множества утверждений if/else внутри самого контроллера, чтобы проверить, является ли он мобильным, и если так делать что-то по-другому - я не хочу спагетти-кода.

Это имеет смысл для вас, и если вы пытаетесь сделать что-то подобное и каким был ваш подход? Единственное, что приходит мне на ум - проверить файлы в фильтре, но это не похоже на правильное решение, я думаю, что это должно быть возможно сделать на уровне urlmapping, где на основе url grails решает, какой контроллер вызывать

ответ

2

Spring Mobile plugin позволяет условно выполнять код контроллера для мобильных устройств в довольно элегантной моды

def list = { 
    def view = "list" 
    withMobileDevice { 
     // mobile-specific logic goes here, in this simplistic example we 
     // just change the view, but you can do anything you like.... 
     view = "mobileList" 
    } 
render(view: view, model: [list: listInstance]) 
} 
+0

спасибо! но меня особенно интересует то, что у меня есть другая логика для контроллера, а не другой html для представления. Я обрабатываю часть представления, проверяя пользовательский агент и расширитель макета, чтобы я мог загружать отдельные CSS и JS для мобильных устройств, и это все, что мне нужно. Поэтому в основном я хотел бы иметь что-то очень похожее, что здесь, но на уровне фильтра, и вместо того, чтобы говорить, какой вид рендеринга я хотел бы указать, какой контроллер я буду вызывать. В качестве альтернативы я мог бы указать, какое действие я бы вызвал - например, list или listMobile. Имеет ли это смысл? – mkk

+0

@mkk вы можете поместить мобильную логику в закрытие 'withMobileDevice', это не ограничивается просто изменением вида (см. Мой комментарий в коде выше) –

+0

ahh ok - right. Недостаток, который я вижу, заключается в том, что он использует wurfl, и мы хотели бы этого избежать, поэтому мы создали собственный метод обнаружения мобильных телефонов на основе пользовательского агента (да, да, я знаю, что он может быть изменен - ​​не проблема для нас) , Вся логика находится в сервисе и возвращает true/false - будь то мобильный или нет. Считаете ли вы, что было бы легко применить этот плагин вместо использования deviceResolver = wurfl? – mkk

Смежные вопросы