0

私は Grails を使用するプロジェクトに参加しています。

bean:inputTemplate を次のように変更する beanFields プラグインを使用します。

   <bean:inputTemplate>
    <div class="prop ${hasErrors(bean:$beanName,field:'$fieldId','errors')}">${label}
      <span  class="value">${field}
      </span>
    </div>
  </bean:inputTemplate>

できる限り、$beanName を BeanName として使用しようとしています。これは、beanFields が beanName と fieldId およびその他のプロパティを inputTemplate タグに渡すためです。

しかし、問題はそれができないことです..そして、私は本当に怠け者で、同じフィールドdivをコピーして貼り付け、そのための巨大なファイルを維持することに常に費やしたくありません...

ですから、そのような状況で誰かが助けることができれば、私は本当に素晴らしいです.

PHP には、評価する変数の名前として $variable の値を使用する $$variable があるため、コードの $ { } ブロック内で変数を参照したいと考えています。

私が十分に明確であることを願っています..そして助けてくれてありがとう.

4

3 に答える 3

0

問題を調査した後..ええ、beanNameがテンプレートに渡され、beanNameの前に$を使用する必要がないことがわかりました...

しかし、それでもhasErrors(beans:beanName、field:'username'、'errors')を使用すると、機能しません。

しかし、私はこれを行うことができました

<bean:inputTemplate>
    <div class="prop">${label}
      <span  class="value">${field}
      </span>
      <g:if test="${errors}"><div class="errors"> ${errors} </div></g:if>
    </div>
  </bean:inputTemplate>

それは機能しませんでしたが、ドメインクラスのvalidateメソッドに依存するため、これを記述します

if ( ! (userSecurity.validate() && userProfile.validate() && address.validate() && photo.validate() ) ){
                    flash.message = ' Error registering user '
                    render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
            }else{
                    UserSecurity.withTransaction { status ->
                            userProfile.photos*.save()
                            address?.save()
                            userProfile?.save()
                            userSecurity.password = userSecurity.password.encodeAsPassword()
                            userSecurity.confirmPassword = userSecurity.confirmPassword.encodeAsPassword()
                            userSecurity?.save()
                    }
                    flash.message = 'No Errors Registering User'
                    render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
            }

なぜなら、&&は最初のFalse結果で失敗し、他の検証メソッドは実行されないからです。

だからこれに変更する

if ( ! (userSecurity.validate() & userProfile.validate() & address.validate() & photo.validate() ) ){
                    flash.message = ' Error registering user '
                    render(view:'index',model:[security:userSecurity,user:userProfile,address:address,photo:photo])
            }else{            ...              }

すべてのBeanが検証され、すべてのフィールドエラーが正しくレンダリングされます。

于 2009-10-28T11:28:40.387 に答える
0

beanName の前に $ は必要ありません。スコープ内にある必要があります。

<div class="prop ${hasErrors(bean:beanName,field:'username','errors')}" >

また、beanFields は既にエラー変数を介してエラー メッセージを提供していると思います。

したがって、hasErrors を呼び出す代わりに、errors が null でないかどうかをテストできます。

于 2009-10-27T22:55:14.613 に答える
0

あなたの質問に対する直接的な回答ではありませんが、bean-fields プラグインを見たことがありますか?

http://grails.org/plugin/bean-fields

私はそれがあなたがやろうとしていること、そしてそれ以上のことをすると思います

于 2009-10-27T11:51:38.853 に答える