2014-12-11 3 views
1

나는이 내 응용 프로그램에서 다음 도메인 :Grails에 제출 일대 동적 형태

class Sport implements Serializable { 

    Set terms 

    static hasMany = [terms: Term] 

    static mapping = { 
     terms cascade: "all-delete-orphan" 
    } 
} 

class Term implements Serializable { 
    String term 
    String tagCode 
    Sport sport 

    static constraints = { 

     sport nullable: false 

    } 
    static belongsTo = [sport: Sport] 
    static mapping = { 
     table "terms" 
     sport cascade: "save-update,merge" 
    } 

} 

및 SportController 업데이트 방법 :

@Transactional 
    def update(Sport sport) { 
     def sportInstance = sportService.update(sport) 
     .... 
    } 

그리고 내가 할 수있는 나는 또한 edit.gsp이 자바 스크립트를 통해 동적으로 용어를 추가/삭제하고 다음과 같은 명명 규칙을 사용합니다 :

<ul> 
    <li> 
     <g:textField id="term${i}" name="terms[${i}].term" 
      required="" 
      value="${term?.term}"/> 
    </li> 
    <li> 
     <g:textField id="synonym${i}" 
      name="terms[${i}].synonym" 
      value="${term?.synonym}"/> 

    </li> 
</ul> 

새 용어를 추가하고 edit.gsp를 제출하면 모두 정상적으로 진행됩니다. SportController.update() 메서드 내에서 sport.terms Set에 새 Term 인스턴스가 포함되어있어 문제가 없습니다. 하지만 편집 페이지에서 하나의 용어를 삭제하고 해당 페이지를 제출하면 SportController.update() 메서드 내에서 sport.terms Set에 여전히 페이지에서 삭제 된 Term 인스턴스가 포함됩니다. 나는이 Term 인스턴스가 제출되지 않았다는 것을 확신한다. (Grails가 어떤 식 으로든 Sport 인스턴스와 함께 가져오고 있다고 생각하지만 요청을하지 않았다.) 비슷한 경험을했을 수도 있습니다. 이걸 좀 도와 주실 수 있나요? 나는 이미 그것을 해결하는 데 약 5 시간을 보냈다. 감사! 옵션

답변

1

하나는 List termsSet terms을 설정하는 것입니다, 그 GORM 삭제합니다 모든 save()

에 컬렉션을 재 작성