0

私は<g:formRemote>この属性を持つこれを持っています、

<g:formRemote name="innerForm" id="innerForm" 
              url="[controller:'user', action:'actionAJAX']"
              update="formMessage">
  <div id="formMessage">Fill up the fields</div>
  <g:render template="form" bean="${newUser}" />
  <div class="buttons">
    <g:submitButton name="Create User"/>
    <input type="reset" value="Cancel"/>
  </div>
</g:formRemote>

送信すると、このコード行を持つクロージャーに進みます。

def actionAJAX() {
  def userInstance = new User(params)
  render(template:"error", bean:userInstance)
}

_error.gspドメインの制約 (nullable、空白など) に違反する Bean エラーの scaffold 表示が含まれます。次のようになります。

<g:hasErrors bean="${userInstance}">
  <ul class="errors" role="alert">
    <g:eachError bean="${userInstance}" var="error">
      <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
    </g:eachError>
  </ul>
</g:hasErrors>
message

def userInstance = new User問題は、Bean [ ]のエラーを に表示できないこと_error.gspです。シナリオは、 のすべてのフィールドを残す_form.gsp( の内容を持ち、generate-viewすべての属性を削除する) だけでしたが、送信時に、ドメインの制約に違反するドメインのすべてのエラーを表示すると予想される にrequiredのみクロージャが返さmessageれます。<div id="formMessage">

4

2 に答える 2

0

それがあなたが示しているすべてのコードである場合、あなたの主な問題はあなたが.validate()またはを呼び出していないこと.save()です。オブジェクトでエラーを取得するには、いずれかを呼び出す必要があります。

def actionAJAX() {
  User userInstance = new User(params)
  if ( !user.save() )
  {
      render(template:"error", model:[userInstance: userInstance])
  }
  else
  {
      render(template:"success", model:[userInstance: userInstance])
  }  
}
于 2012-09-11T12:28:16.563 に答える
0

コードをざっと見てみると、多くの Grails 規則の 1 つが欠けている可能性がありますが、「bean」をマップ キーとして userInstance をレンダー メソッドに渡しています。そして、それを ${userInstance} として参照します。Templeta 内で ${bean} として参照するか、次のように渡します。

render(template:"error", userInstance:userInstance)

これはあなたの質問に対する回答ではありません。追加のヒントです。エラー テンプレート内またはその代わりにg:renderErrors タグを使用できます。

于 2012-09-11T11:24:58.473 に答える