0

コントローラーでは、次のようにフォーム入力を検証します。

withForm {
    def user = new User(params)    
    if(user.save()) {
        render "success"
    } else {
        render view: "userForm", model: [user: user]
    }
}.invalidToken {
    render view: "userForm"
}

そのフィールドにエラーがある場合、フォームで入力フィールドにクラスエラーを追加します。

<input value="${user?.name}" name="name" type="text" class="text${user?.errors?.getFieldError("name") ? ' error':''}" id="name">

問題: Bean ユーザーがビューに表示されません。withForm ラップを削除すると問題なく動作します。

誰が何が起こっているのか考えていますか?

ありがとうございました。

4

2 に答える 2

0

たとえば、フォーム宣言にuseTokenが含まれていますか

<g:form useToken="true" ...>

ドキュメントごとに、withForm

withForm メソッドでは、フォームで useToken 属性を使用する必要があります

更新 重複送信時に User Bean を返しますか? 保存に失敗した場合にのみ User を返します。重複送信時にユーザーを返す場合は、試してください。

}.invalidToken {
  render view: "userForm", model: [user: user]
}
于 2013-09-26T15:50:41.790 に答える
0

ビューで検証エラーを表示するには、コントローラー アクションでユーザー インスタンスを作成して検証する必要があります。現在の.invalidTokenブロックはこれを行いません。これを簡単に行うための良い方法は、コントローラー アクションにUserパラメーターから自動的にインスタンスを作成させることです。

def myAction(User user) {
    withForm { 
        if(user.save()) {
            render "success"
        } else {
            render view: "userForm", model: [user: user]
        }
    }.invalidToken {
        render view: "userForm", model: [user: user]
    }
}
于 2013-09-26T19:49:03.960 に答える