2009-06-26 3 views
2

Grails 애플리케이션에서 컨트롤러 조치의 데이터를 조치 후에 실행되는 필터로 전달하는 몇 가지 방법을 찾고 있습니다. 내가 좋아하는 뭔가 생각 :컨트롤러에서 필터로 데이터를 전달하십시오.

  • 사용 메타 프로그래밍은 "passData을 추가 (폐쇄 :

    class MyController { 
        def myAction = { 
         render(view:"myView", model:[key: "value"]) 
    
         passData { 
          // Do some processing here 
          name = "paolo" 
          age = 38 
         } 
        } 
    } 
    
    public class MyFilters { 
    
        def name 
        def age 
    
        def filters = { 
         myFilter(controller: "*", action: "*") { 
          after = { model -> 
           // Do something with name and age 
           return true 
          } 
         } 
        } 
    } 
    

    원래 계획은 BootStrap.config의 초기화() 폐쇄에서 다음 작업을 수행 할 수 있었다 pdClosure) "메서드를 모든 컨트롤러에 적용합니다.

  • pdClosure의 대리자를 MyFilters로 설정하면이 클로저 내에 이름 및 나이 속성이 설정 될 때 MyFilters 인스턴스에 설정됩니다.

그러나 특정 컨트롤러에 대해 호출 될 MyFilters 인스턴스에 (BootStrap.init에서) 액세스 할 수있는 확실한 방법이 없기 때문에이 방법이 작동하지 않는다는 것을 알았습니다.

마찬가지로 필터 내에서 컨트롤러 인스턴스에 액세스 할 수있는 방법이없는 것처럼 보입니다. 물론, 모든 데이터를 모델에 넣을 수는 있지만 두 모델간에 데이터를 전달하는보다 세련된 방법이 있는지 궁금합니다. 모델에 데이터를 전달

덕분에, 돈

답변

3

무척 우아하고 쉽게 나에게 보인다. 어떠한 이유로 든 뷰에서 데이터를 사용할 수 없도록하려는 경우 필터의 모델에서 데이터를 제거 할 수도 있습니다.

0

필터에서 모델 인 데이터를 수정하려는 경우 솔루션이 정상적으로 보입니다.

그러나 컨트롤러에서 필터로 일부 매개 변수를 전달하려면 요청 속성이 더 좋아야합니다 (요청 범위의 데이터 만 필요한 경우). 이렇게하면 모델을 일부 요청 매개 변수와 함께 사용하지 않아도됩니다.

관련 문제