2012-01-13 3 views
1

모바일 버전의 컨트롤러를 만들려고했는지 궁금합니다.Grails : 컨트롤러의 모바일 버전

지금 GrailsLayoutDecoratorMapper를 휴대 전화가 감지되어 일부 컨트롤러에 대해 비슷한 작업을 수행하려는 경우 layout.mobile.gsp를 적용하는 사용자 정의 MobileDecoratorMapper로 확장합니다. 내 생각은 컨트롤러의 모바일 버전 (예 : SomethingControllerMobile 또는 SomethingController.mobile.groovy)이있는 경우 필터를 체크인하고 기본 SomethingController 대신 리디렉션하는 경우입니다.

그 이유는 컨트롤러 자체가 모바일인지 확인하기 위해 if/else 문을 많이 사용하지 않으려 고합니다. 그렇다면 다른 방식으로 뭔가를 수행하십시오. 스파게티 코드를 원하지 않습니다.

당신이 이해할 만합니까? 그렇다면 비슷한 것을 시도해 보았습니까? 그리고 귀하의 접근 방식은 무엇입니까? 내 마음에 오는 유일한 것은 필터에 파일을 확인하지만 적절한 솔루션처럼 보이지 않는데, 나는 URL grails의 기초 위에서 어떤 컨트롤러를 결정하는 urlmapping 수준에서 수행되어야한다고 생각한다.

답변

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을 사용하지 않는 것이다. 나는 user-agent를 점검하고 레이아웃 데코레이터를 확장하여 뷰 부분을 처리하므로 모바일 용으로 별도의 CSS와 JS를로드 할 수 있으며 이것이 필요한 전부입니다. 그래서 기본적으로 나는 여기에있는 것과 매우 비슷한 것을 가지고 싶습니다. 그러나 필터 레벨에서 렌더링 할 뷰를 말하면서 어떤 컨트롤러를 호출 할 것인지 지정하고 싶습니다. 또는 내가 호출 할 액션을 지정할 수 있습니다 (예 : list 또는 listMobile). 그것은 의미가 있습니까? – mkk

+0

@mkk 모바일 관련 로직을 withMobileDevice 클로저 안에 넣을 수 있습니다.보기를 변경하는 것 (위 코드의 내 주석 참조)에만 국한되지 않습니다. –

+0

ahh ok - right. 내가 볼 수있는 단점은 wurfl을 사용한다는 것입니다. 그래서 우리는 사용자 에이전트를 기반으로 휴대 전화를 감지 할 수있는 자체 메서드를 만들었습니다 (그렇습니다. 수정 될 수 있음을 알고 있습니다 - 우리에게는 문제가 아닙니다) . 전체 논리가 서비스에 있으며 true/false를 반환합니다 (모바일인지 아닌지). deviceResolver = wurfl을 사용하는 대신이 플러그인에 적용하기가 쉽다고 생각하십니까? – mkk

관련 문제