2

Grails controller-action で、必要なすべてのパラメーターがこのアクション メソッドに提供されていることを確認するにはどうすればよいですか。つまり、アクションに必要なすべてのパラメーターをマップまたはリスト オブジェクトを使用して簡単に指定できますか。

パラメータを取得し、各アクションで明示的なチェックを行うことができますが、単純な検証のためだけに大量のコードが必要です。パラメータ名が欠落しているデフォルトのエラーメッセージが返されるようにする簡単な方法はありますか。

編集

言い忘れたと思われることが 2 つあります。1. これらのコントローラー アクションは Web サービスを実装するためのものであり、GSP にはリンクされていません。2.必要なパラメーターは、アクションごとに大きく異なります。コマンドオブジェクトを使用することは正しい方法ではないようです。メソッドごとに必要なパラメーターが異なり、Web サービスごとにコマンド オブジェクトを作成することはできません。

Spring には、アクションごとに指定できる似たようなものがあります。これはパラメーターであり、それらが必須かオプションかを示します。

4

2 に答える 2

2

params からのデータを使用してドメイン クラスのインスタンスを生成する場合は、それに応じて制約を設定し、ドメイン クラスのインスタンスを生成して、validateメソッドを使用します。

検証したいデータが実際にはドメイン クラスに関連していない場合でも、コマンド オブジェクトを作成してコントローラー アクションで指定することにより、ほぼ同じ検証メカニズムを使用できます。

これは、ドキュメントのコマンド オブジェクトの例です。

@grails.validation.Validateable
class LoginCommand {
    String username
    String password
    static constraints = {
        username(blank: false, minSize: 6)
        password(blank: false, minSize: 6)
    }
}

そして、コントローラーで:

class LoginController {
    def login(LoginCommand cmd) {
        if (cmd.hasErrors()) {
            redirect(action: 'loginForm')
            return
        }
        // work with the command object data
    }
}

ドキュメントからの関連する引用:

コントローラー アクションが実行される前に、Grails は自動的にコマンド オブジェクト クラスのインスタンスを作成し、リクエスト パラメーターをバインドしてそのプロパティを設定します。コマンド オブジェクト クラスが Validateable とマークされている場合、コマンド オブジェクトは検証されます。

于 2013-05-05T03:02:48.900 に答える