2

Personクラスがあるとしましょう。人にはビルダードクターの2人の子供がいます。Personクラスにはusername属性が付属しています(よくあることですが)。もちろん、継承により、BuilderクラスとDoctorクラスにもユーザー名があります。

ここで、i18n検証メッセージを美化したいと思います。私はそれが私の3つのクラスすべてに適用されると考えて次のように追加します

person.email.blank=Email is required

ただし、子クラスのオブジェクトを検証する場合は使用されません。以下を追加すると

doctor.email.blank=Email is required
builder.email.blank=Builder is required

希望の結果が得られましたが、それほど乾燥していないようです。誰かがこれについて何か考えを持っていますか?多分私は何か間違ったことをしているだけです!

4

1 に答える 1

0

カスタムバリデータと、必要なすべてのメッセージに対して単一のメッセージを使用することで、これを実現できました。

プロパティファイルで:

default.isRequired= {3} is required
email=Email
otherProperty=Other property

ドメイン クラス:

email validator: {val, obj -> obj.isRequiredValidator(val, "email") }
email validator: {val, obj -> obj.isRequiredValidator(val, "otherProperty") }

private isRequiredValidator(val, key) {
  if (!val)
   return [default.isRequired, messageSource.getKey(key)]
}

validate() を呼び出した後の結果は、「Email is required」および「Other property is required」になります。

ドメイン クラス間で共有することにより、カスタム バリデータ メソッドを再利用できます。

于 2012-08-27T19:47:52.010 に答える