マルチドメイン協会に関するGrails検証の問題?
-
10-10-2019 - |
質問
3つのドメイン間でアクションを保存することを検証する必要があります。ここに関係があります。
ユーザー - JobProcess:1対Many、JobProcess-HeatMap:1対Many。
User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
検証フローを制御するために例外を使用しています。ここに私の検証クラスがあります。
class ValidationException extends RuntimeException {
Object invalidObject
ValidationException(String message, Object invalidObject) {
super(message)
this.invalidObject = invalidObject
}
}
また、ヒートマップ操作を抽象化するサービスクラスを構築します(そして、パラメージデータをオブジェクトにバインドします):
def addJob(params) {
def user = User.findById(params.user_id)
if (user) {
def heatmap = new Heatmap(params)
def process = new JobProcess(params)
process.addToHeatmaps(heatmap)
user.addToJobs(process)
if (user.save()) {
return heatmap
} else {
throw new ValidationException("Invalid form", heatmap )
}
}
}
そして私のコントローラー:
try {
def heatmap= HeatmapService.addJob(params)
flash.message = "Running new process : $heatmap.job}"
redirect(uri:'/')
} catch (ValidationException che) {
flash.message = "Validation Failed ${che.message}"
render(view:'create', model:[heatmap:che.invalidObject])
}
私の最初の問題 :user.save()を使用してエラーの検証はありません - なぜ検証が実行されないのですか?
この問題を修正することができます。if(user.save())によって更新されます。
より良い方法はありますか?
私の2番目の問題 :私のリダイレクトは、無効なポストの例外をトリガーしていません。
私は自分の作成ビューにリダイレクトされていますが、私のフィールドはすべて空白(すべてのフィールド情報が失われました)であり、検証エラーはありません。
それにもかかわらず、私はモデルを使用しています:[heatmap:che.invalidobject]。
例外を除いて、私はInvalidObjectを渡しているので、私の作成ビューは正確な検証エラーを表示する必要がありますか?どうしたの ?
ありがとう
解決
私は自分の問題を見つけました、それは私のGSPビューによるものです、私は間違った豆を使用していました:
<td valign="top" class="value ${hasErrors(bean: heatmapInstance, field: 'project_name', 'errors')}">
そこで、HeatMapに更新しましたが、これでエラーの検証が表示されます。
<td valign="top" class="value ${hasErrors(bean: heatmap, field: 'project_name', 'errors')}">
ビクターに感謝します。
所属していません StackOverflow