나는이 내 응용 프로그램에서 다음 도메인 :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 시간을 보냈다. 감사! 옵션