奇妙に十分に文書化されていない(文書化されていたとしても)、すでに知られている古いトピックに遭遇しました。Grails 2.4.4 で 1 対多の関係を持つフォーム用の動的テーブルを作成しようとしましたが、そのためには 2.1 のチュートリアルに基づいて作成する必要がありました。
私はwritetable jQuery プラグインを使用して、フォーム用の見栄えの良いレスポンシブ HTML を開発するのに役立てています。1 行を削除すると、期待どおりに動作し、次の HTML の抜粋が生成されます。
例 1 :行 1 (ゼロベース) を削除しようとする (行 1 の削除ボタンを押す)
<input type='hidden' name='faixas[1].deleted' value='true'/>
クラスを考えると:
package mobvida
class Questionario {
String titulo
int score = 0
List faixas
List questoes
static belongsTo = [usuario:Usuario]
static hasMany = [ questoes : Questao,
faixas : Faixa ]
static constraints = {
}
static mapping = {
faixas cascade: "all-delete-orphan"
}
}
class Faixa {
int limiteInf
int limiteSup
String nome
boolean deleted
static transients = [ 'deleted' ]
static belongsTo = [questionario: Questionario]
static constraints = {
}
def String toString() {
return "${nome} (${limiteInf} - ${limiteSup})"
}
}
QuestionarioController.groovy
ファイルには、コントローラークラスの下に次のものがあります。
@Transactional
def update(Questionario questionarioInstance) {
if (questionarioInstance == null) {
notFound()
return
}
questionarioInstance.faixas.removeAll{(it.deleted || (it == null))}
// questionarioInstance.questoes.removeAll{(it.deleted || (it == null))}
log.info "${questionarioInstance}"
for (it in questionarioInstance.faixas) {
log.info "${it}(${it.id}) state: ${it.deleted}"
}
//...
html
送信前にページに追加されていても、何も削除しません。メソッドのログの指示により、update()
削除しようとしていた行が属性deleted
を false として保持していることを確認できました。質問は...削除するためにここで何が欠けていますか?