2014-03-30 2 views
1

컨트롤러의 저장 작업 중에 도메인 속성을 수정하거나 추가하려고합니다. 나는 Grails를 2.3.2을 사용하고 다음과 같이 내 코드는 다음과 같습니다grails에서 저장하는 동안 도메인의 속성을 변경하십시오. 2.3

@Transactional 
def save(Stock stockInstance) { 
    if (stockInstance == null) { 
     notFound() 
     return 
    } 
    stockInstance.stockBy = User.findById(springSecurityService.getPrincipal().id) 

    if (stockInstance.hasErrors()) { 
     respond stockInstance.errors, view: 'create' 
     return 
    } 

    stockInstance.save flush: true 

    request.withFormat { 
     form { 
      flash.message = message(code: 'default.created.message', args: [message(code: 'stockInstance.label', default: 'Stock'), stockInstance.id]) 
      redirect stockInstance 
     } 
     '*' { respond stockInstance, [status: CREATED] } 
    } 
} 

문제가있다 'stockBy'속성이 null을오고있다. springsecurityservice가 값을 반환하고 있지만 stockBy 속성에는 설정되어 있지 않습니다. 이 코드는 이전 버전의 grails에서 잘 작동했습니다. Grails 2.3.2에서 왜 이것이 작동하지 않습니까?

+1

코드가 작동해야합니다. 개발 과정에서 GGTS 또는 다른 IDE를 사용하고 있습니까? 'User.findById'가 예상 한 것을 리턴하고 있는지 디버그 할 수 있습니다. 일반적으로'springSecurityService.currentUser'를 사용하는 경향이 있습니다. –

+0

stockAs에 'stockInstance.stockBy', 'springSecurityService.getPrincipal() .id'및 'User.findById (springSecurityService.getPrincipal(). id) '그리고 나는 모든 정확한 결과를 얻고있다. 문제는 유효성 검사 중에이 결과가 도메인에 유지되지 않으므로 'stockBy'를 null로 설정할 수 없다는 오류가 발생합니다. –

+0

도메인 클래스 코드 게시, 유효성 검사기를 사용하고 있습니까? –

답변

1

저는 같은 문제로 고심하고 있습니다. 문제는 도메인 객체가 이전 오류를 기억하고 stockInstance.stockBy에 사용자를 추가 한 후 다시 유효성을 검사해야한다는 것입니다.

stockInstance.stockBy = springSecurityService.currentUser 
    stockInstance.validate() 
+0

맞아. Grails가 커맨드 객체를 액션에 전달하기 전에 유효성을 검사하기 때문에 이미 검증에 실패한 인스턴스로 원래 코드가 작동하고 있습니다. 이 시점에서 객체는 유효하지 않으므로 오류가 발생합니다. 코드는 객체의 상태를 변경 한 다음 .hasErrors()를 호출합니다. hasErrors()는 객체가 오류를 지우거나 재 검증 될 때까지 true를 반환 할 것입니다. –

관련 문제