2012-01-13 69 views
1

我想知道你是否试图制作控制器的移动版本?Grails:控制器的移动版本

现在,我正在使用自定义的MobileDecoratorMapper扩展GrailsLayoutDecoratorMapper,该应用程序在检测到手机时应用layout.mobile.gsp,并且我想为某些控制器执行类似操作。我的想法是检查过滤器是否存在控制器的移动版本(例如SomethingControllerMobile或SomethingController.mobile.groovy),如果是,则重定向到它而不是默认的SomethingController。

原因是我想避免控制器本身内部有很多if/else语句来检查它是否是移动的,如果是的话,做一些不同的事情 - 我不想做意大利面代码。

对你有意义吗?如果是的话,你是否试图做类似的事情?你的方法是什么?我唯一想到的是检查过滤器中的文件,但它看起来不是一个合适的解决方案,我认为这应该可以在urlmapping级别上完成,在此基础上,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 2012-01-13 13:00:47

+0

@mkk你可以在'withMobileDevice'闭包里放置移动特定的逻辑,它不仅限于改变视图(请参阅我在上面的代码中的注释) – 2012-01-13 13:53:57

+0

ahh ok - 对。我可以看到的缺点是它使用wurfl,我们想避免这种情况,这就是为什么我们创建了自己的方法来检测基于用户代理的手机(是的,我知道它可以被修改 - 对我们来说不是问题) 。整个逻辑在服务中,并且返回true/false - 无论是否为移动设备。你认为应用这个插件会比较容易,而不是使用deviceResolver = wurfl? – mkk 2012-01-13 13:59:55