2012-06-26 3 views
1

grails 프로젝트의 모든 컨트롤러에서 gettable 및 settable 인 배열을 만드는 방법이 있습니까? 모든 아이디어를 높이 평가합니다!Grails의 전역 배열?

+1

도메인 클래스를 만들어 배열을 나타내지 않는 이유는 무엇입니까? –

답변

0

"gettable and settable"이라고 말하면 컨트롤러가 배열의 개별 요소를 수정할 수있게하거나 컨트롤러가 배열을 다른 배열로 완전히 대체하고 다른 컨트롤러에서 변경 가능합니까?

은 "Grails의 방법은"서비스가 일관하게 유지하는 데 필요한 어떤 동기화 처리와, 서비스 및 그 통해 액세스를 내 배열을 캡슐화하는 것입니다 - 그리고 당신은 확실히 당신이 경우 일부가지 동기화가 필요합니다 잠재적으로 여러 개의 스레드에 의해 동시에 변이 된 데이터를가집니다. 또는 데이터베이스에 데이터를 저장하고 트랜잭션 업데이트를 처리하도록 할 수 있습니다.

이 공유 배열을 지원하기 위해 어떤 유스 케이스가 필요한지 좀 더 구체적인 대답을 제공하려면 알기를 바랍니다.

0

Config.groovy에 배열을 정의/초기화 한 다음 컨트롤러에서 grailsApplication.config을 사용하여 액세스 할 수 있습니다.

Bootstrap.groovy

class BootStrap { 
    def grailsApplication 

    def init = { servletContext -> 
     grailsApplication.config.myArray = [] 
    } 
    def destroy = { 
    } 
} 

일부 컨트롤러 : 그 다음은 부트 스트랩을 사용하여 다른 간단한 예제 내 머리 위로 떨어져 하나의 방법 ...

업데이트

입니다

class TestController { 

    def addItem() { 
     grailsApplication.config.myArray << "Value ${grailsApplication.config.myArray.size()}" 
     render grailsApplication.config.myArray 
    } 
} 

이 방법을 사용하면주의가 필요합니다. Groovy는 기본적으로 스레드로부터 안전하지 않고 동시 수정 예외가 발생하기 쉬운 ArrayList를 사용합니다. 동시 실행이 필요한 경우 동기화 된 메서드에서 추가/삭제를 래핑하거나 비동기 이벤트를 이벤트 핸들러 또는 이와 유사한 방식으로 게시해야합니다.

1

배열을 생성하고 그것을 부트 스트랩의 grailsApplication에 넣거나 (느리게 생성 할 수 있습니다). 모든 컨트롤러에서 grailsApplication의 배열을 사용할 수 있습니다.