2011-08-30 3 views
3

Play! 컨트롤러를 사용하여 모든 요청을 처리하여 적절한 작업에 도달하기 전에 interceptor method을 만들 수 있습니다.게임 프레임 워크에서 인터셉터와 작업간에 데이터를 공유하는 방법이 있습니까?

public class Admin extends Application { 

    @Before 
    static void checkAuthentification() { 
     if(session.get("user") == null) login(); 
     // otherwise, 
     User loggedOnUser = User.find("byUsername", session.get("user")); 
    } 

    public static void index() { 
     // any way to access loggedOnUser ? 
     List<User> users = User.findAll(); 
     render(users); 
    } 
    … 
} 

요격기에 값을 설정하고 동작에 액세스하는 방법이 있습니까? 서블릿에 request.setAttribute()과 같은 종류입니까?

답변

2

인터셉터와 작업은 동일한 요청 컨텍스트 (요청, 응답, 세션 등)를 공유합니다. 위에서 설명한 것처럼 renderArgs를 사용하도록 선택할 수 있지만 원하는 값이 아닌 뷰에서 이러한 값을 사용할 수 있습니다. 인터셉터와 액션 사이에 상태를 유지하려면 대신 request.args 해시를 사용하십시오.

4

컨트롤러의 renderArgs 매개 변수 (here 참조)를 사용하거나 캐시에 값을 저장할 수 있습니다 (밀리 초 전에 값이 추가되면 동일한 요청에 값을 사용할 수 있음).

+0

허허, 그건 하나의 깨지기 쉬운 링크입니다. – itsadok

+0

@itsadok 예, 단기 참조 : P –

관련 문제