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