1

ここで何が間違っているのかわかりません。私はそれが微妙なものであることを願っています。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
}
4

1 に答える 1

1

リダイレクトでは、モデルはレンダリングとは異なるクエリ パラメータとして使用されます。レンダリングは実際の転送を行い、オブジェクトをリクエスト スコープに入れます。エラーが発生した場合に行う必要があるのは、ビューをレンダリングしてモデルを渡すことです。その後、目的の出力が得られます。

于 2012-05-24T19:12:01.140 に答える