ここで何が間違っているのかわかりません。私はそれが微妙なものであることを願っています。gsp ページにエラーを渡すことができないようです。コントローラーに次のコードがあります。
def submit = {
if (params) { // if there are parameters
def sampleInstance = new Sample(params)// new sample
if (sample.validate()) { // try to validate
sample.save()
flash.message = "Successfully Entered Sample"
redirect ( action: 'sample' )
}else{
flash.message = "Error Entering Sample"
sampleInstance.errors.each {
println it
}
redirect ( action: 'sample', model:[sampleInstance:sampleInstance])
}
}
}
params が null でないことを確認しました。検証に失敗すると、検証済みの hasErrors() が作成され、コードsample.errors.each {println it}
は期待どおりに正しい Field エラーを通知します。しかし、リダイレクト構文に何か問題があるのでしょうか? はflash.message
機能しますが、マップにアクセスできず、model:[sampleInstance:sampleInstance]
エラーがレンダリングされないためです。
私のgspのコードは次のとおりです。
<g:hasErrors>
<div class="errors">
<g:renderErrors bean="${sampleInstance}" as="list" />
</div>
</g:hasErrors>
私のコントローラーは SubmitSampleController と呼ばれ、アクションは submit と呼ばれ、gsp ページは sample.gsp と呼ばれます。
これは私の問題に対する答えかもしれません: 私は sample と呼ばれる別のアクションを持っています。送信アクション内ではなく、サンプル アクション内ですべてのロジックを実行する必要があるのではないでしょうか? または、モデルをあるアクションから同じコントローラー内の別のアクションに渡す方法はありますか? 元のモデルが失われているような気がします。
def sample(){
def now = new Date()// today's date
def today = com.Sample.findAllBySampleReceivedDateGreaterThanEquals(now.clearTime())// finds all samples submitted today
[checkDate:today, date: now] // passes a map of checkDate and todays date to the sample.gsp page
}