2014-06-11 3 views
0

내가 도메인 개체 등 다양한 유형의 보고서를 저장하는 웹 응용 프로그램을 만들고있어 예상대로 작동하지 않는, 그래서 이름 데이터가 포함 된 도메인 개체 HeadOfHousehold를 가지고 있고, 다른 도메인에 대한 참조는 같은 객체 reports, addresses 및 기타 부양 가족. 나는 최근에 열람/생성 된 목록을 작성하려고합니다. HeadOfHousehold 객체. 여러 번 Google 검색을하고 설명서를 뒤져 보면 서비스가 적절한 해결책으로 보입니다. 그래서 ClientListService 생성 : 나는 다음 내 다양한 ​​컨트롤러에 참조 할 수 있다고 생각Grails의 세션 범위는

@Transactional 
class ClientListService { 
    static scope = "session" 
    String message // right now I'll be happy to just see the same message across 
        // pages I can add a list and manipulate it later. 
} 

를, 그리고 이런 식으로 뭔가 지속될 것 :

def clientListService 

def index(){ 
    hasSearched = false 
    clientListService = new ClientListService(message: "Hello") 
    [errorMessage: params.errorMessage, clients:clientListService] 

} 

나중에 컨트롤러에 사용할 수 있어야합니다 :

를 나는이 메시지를받을 때
class HeadOfHouseHoldController { 
    def clientListService 
    def index() { 

     [customer: HeadOfHousehold.get(params.id), clients: clientListService] 
    }//... 

는 그러나, 객체가 null의 경우로 나타납니다. 나는 (내가 그렇게 특별한 아무것도 아니에요)가 제대로 세션을 정의하고 있지 않다 만약 내가 어떻게 세션 범위의 작품을 오해하고있어 경우

***************${clients?.message}******************** 

그래서 내가 모르는 내의 index.gsp에서 , 또는 다른 것. 개체를 정의한 원래 페이지에 적절한 메시지가 표시되지만 이후 페이지에는 표시되지 않습니다.

또한,이 이것에 대해 갈 수있는 적절한 방법이 있는지 확실하지 않습니다; 지금 당장 제가 필요로하는 것은의 목록입니다 (다른 페이지의 목록에 추가 할 수 있습니다).하지만 다른 논리 및 항목을 그러한 클래스에 추가 할 수 있습니다.

답변

2

내가 올바르게 session 범위를 이해 생각한다. session scope이있는 각 Spring bean은 HTTP 세션에 바인드됩니다.

그러나 첫 번째 컨트롤러 목록은 모든 잘못을 수행합니다. 서비스 클래스를 직접 인스턴스화하지 않아도됩니다. 이것은 Spring (Grails)의 기능입니다.

class FooController { 
    def clientListService // gets autowired by Grails/Spring 

    def index(){ 
     hasSearched = false 
     clientListService.message = 'Hello' // only assign a String value to the service 
     [errorMessage: params.errorMessage, clients:clientListService] 
    } 
} 

이 당신이

clientListService = new ClientListService(message: "Hello") 

처럼 뭔가를하고 코드가 작동을 기대하지 수 없음을 의미합니다. 희망이 도움이됩니다. Grails는 그것이 현재 세션에 부착되기 때문에 클래스를 인스턴스화 할 필요가 있으므로, 내가 찾던 정확히

+0

가 맞나요? 또한이 작업을 통해 목록을 'session' 개체에 직접 바인딩하고 필요한 방식으로 액세스 할 수 있음을 발견했습니다. 한 기술이 다른 기술보다 선호됩니까? –