Grails Framework - Reference Documentation에서 Collections 및 Maps에 바인딩하는 다음 예제가 예외로 표시된 경우 실패하는 이유는 무엇입니까?grails 데이터 바인딩 모음
class Band {
String name
static hasMany = [albums: Album]
List albums
}
class Album {
String title
Integer numberOfTracks
}
def bindingMap = [name: 'Genesis',
'albums[0]': [title: 'Foxtrot', numberOfTracks: 6],
'albums[1]': [title: 'Nursery Cryme', numberOfTracks: 7]]
def band = new Band(bindingMap)
assert band.name == 'Genesis'
assert band.albums.size() == 2
assert band.albums[0].title == 'Foxtrot'
assert band.albums[0].numberOfTracks == 6
assert band.albums[1].title == 'Nursery Cryme'
assert band.albums[1].numberOfTracks == 7
≫ groovy.lang.MissingPropertyException: No such property: albums[0] for class: Band Possible solutions: albums at Script1.run(Script1.groovy:15) at org.grails.plugins.console.ConsoleService.eval(ConsoleService.groovy:57) at org.grails.plugins.console.ConsoleService.eval(ConsoleService.groovy:37) at org.grails.plugins.console.ConsoleController.execute(ConsoleController.groovy:32) at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198) at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53) at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49) at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722)
'Band'가 도메인 클래스가 아니면'hasMany' 속성은 의미가 없습니다. 도메인 클래스가 아닌 경우 hasMany를 제거하고 "albums [0]"과 같은 다른 기능을 처리하는 방법을 알고있는 데이터 바인딩 메커니즘을 활용하려면 생성자를 사용할 수 없으며 대신 명시 적으로 데이터 바인더를 호출해야합니다. 예를 들어, 컨트롤러에서'bindData (bandInstance, bindingMap)'와 같은 것을 호출 할 수 있습니다. 여기서'bandInstance'는'Band' 클래스의 인스턴스이고'bindingMap'은 위에서 설명한'Map'입니다. –
실제로 참조 문서를 읽을 때 자세한 내용에주의를 기울여야합니다 !!! 참조 문서에서 다음과 같이 말합니다 : 다음 코드는 도메인 클래스에서 객체 목록을 채우는 간단한 예제를 보여줍니다 ... 'domain class'에 밑줄을 긋습니다. Jeff, 당신은 도메인 클래스가 아닌 도메인 클래스 바인딩에 대해 언급 한 두 가지 경우 모두에 대해 옳았습니다. 이미 두 가지를 모두 테스트했습니다. 고마워. – user3670996
'Band' 클래스가 도메인 클래스가 아니라고 말하는 것 같습니다. 그렇다면'hasMany' 선언을 도메인 클래스 밖에서 의미가 없으므로 제거 할 수 있습니다. –