4

ユーザー入力が不適切な場合などのエラーは、ドメインまたはコマンドオブジェクトの検証を使用して常に合理的にチェックできるとは限りません。

たとえば、「パスワードを忘れた」機能を作成するときに、ユーザーがデータベースに存在しないユーザー名を入力した場合に適切なメッセージを表示したいと思います。したがって、コントローラーのアクションは次のようになります

...
def user = User.find{name==uname}
if(!user) {
    // user not found in db, output error and render view again
    render view: 'forgotPassword'
    return
}
// do reset password stuff
...

<g:hasErros>タグ内のビューにエラーを表示するにはどうすればよいですか?

flash.message(生成されたコントローラー/ビューが行うように)私は単に情報メッセージを表示しているだけでなく、エラーメッセージを表示しているため、私には正しくないようです。<g:hasErros>そのため、メッセージはタグで処理され、ドメイン検証エラーのように表示される必要があると思います。(ユーザーにとっては、同じフィードバックレベルです:「入力が間違っているために機能しませんでした」。

コマンドオブジェクトの作成@Validateableも正しくないようです。IMHO、データベースに対して値をチェックすることは、実際にはコマンドオブジェクト内の検証の責任ではありませんか?またはそれは?それから、それは私には少し複雑すぎるようです。

それで、行くための最良の方法は何ですか?他のフレームワーク(Wicketなど)は、ビュー内のフィードバックメッセージを簡単に処理できるようerror(String msg)にするなどの個別のメソッドを提供します。info(String msg)Grailsにも同様の概念がありますが、私はまだ見つけていませんか?

4

1 に答える 1

13

flashは単なるマップであり、文字列、数字、オブジェクトなど、好きなものを入れることができます。1つのリクエストしか持続しないため、セッションを一時的に汚染するだけなので便利です。生成されたGSPの規則はmessageキーを使用することですが、これは単なる規則です。

別のメッセージを保存する場合は、別のキーに保存します。

flash.warning = '...'

また

flash.error = '...'

他のメッセージと同じようにGSPで取得します。

于 2012-09-03T15:59:43.480 に答える