0

私はSpringMVC3を学んでおり、一般的にJavaの専門家ではありません。少し質問があります

  1. 私の知るModelAndView限り、もう使われていません。私もこれらの2つを見ます:
    • org.springframework.ui.Model
    • org.springframework.ui.ModelMap

ModelMapとの違いは何Modelですか?それらの1つはような古いスタイルModelAndViewですか?

  1. フォームデータをコントローラーに戻すにはどうすればよいですか?これが私がこれまでに持っているものです:

見る

<form action="/KSC/users/update" method="POST" class="form-horizontal" id="fEdit">

                            <input type="hidden" id="id" name="id" value="${record.id}" />

                            <div class="control-group">
                                <label for="userName" class="control-label"></label>
                                <div class="controls">
                                    <input type="text" id="userName" name="userName" value="${record.userName}" data-validation-engine="validate[required]" />
                                </div>
                            </div>

                            <div class="control-group">
                                <label for="email" class="control-label"></label>
                                <div class="controls">
                                    <input type="text" id="email" name="email" value="${record.email}" data-validation-engine="validate[required,custom[email]]" />
                                </div>
                            </div>

                            <div class="control-group">
                                <div class="controls">
                                    <input type="submit" value="Save" class="btn btn-primary" />
                                    <a href="/KSC/users" class="btn">Cancel</a>
                                </div>
                            </div>
                        </form>

アクションの編集

編集アクションから上記のビューに最初に渡したものは次のとおりです。

@RequestMapping(value = "/users/edit/{id}")
    public String edit(ModelMap model, @PathVariable("id") int userId) {
        KCSUser user = service.find(userId);
        model.addAttribute("record", user);
        return "user/edit";
    }

コントローラー更新アクション

@RequestMapping(value = "/users/update")
    public String update(ModelMap model) {
        //TODO
    }

更新されたモデルデータにアクセスして、DBに保存できるようにする必要があります。理想的には、それが素晴らしいオブジェクトに直接マップできるKSCUser場合..しかしそうでない場合は、ModelまたはModelMapも問題ありません。これどうやってするの?

4

2 に答える 2

4

フォームデータをコントローラーに戻すにはどうすればよいですか?

次のように更新メソッドの署名を変更するだけです。

@RequestMapping(value = "/users/update")
public String update(KSCUser user, ModelMap model) {
    // ...
}

springはKSCUserのインスタンスを作成し、入力フィールドのname属性に基づいてプロパティを入力します。したがって、のような入力フィールドがある場合、springはKSCUserのインスタンスを呼び出そ<input type="text" name="username" />うとします。setUsername

次のように、メソッドのシグネチャを変更することもできます。

@RequestMapping(value = "/users/update")
public String update(@RequestParam("username") final String username) {
    // ...
}

次に、springは入力フィールドの値に名前を挿入しますusername

または、次のようにメソッドのシグネチャを変更できます。

@RequestMapping(value = "/users/update")
public String update(Map<String, String> params) {
    // ...
}

その後、springはすべてのリクエストパラメータをparamsマップに挿入します。次のようにユーザー名にアクセスできますparams.get("username")

完全を期すために...メソッドのシグネチャを次のように変更できます。

@RequestMapping(value = "/users/update")
public String update(HttpServletRequest request) {
    // ...
}

その後、springはのインスタンスを挿入するだけでHttpServletRequest、vanilaサーブレットAPIの場合と同じようにリクエストパラメータにアクセスできます。

理想的には、KSCUserオブジェクトに直接マップできれば便利ですが、そうでない場合は、ModelまたはModelMapも問題ありません。

インジェクトのみを行う場合(メソッドModelMapで行う場合のようにupdate)、リクエストパラメーターは含まれず(@SeessionAttributesを使用する場合を除く)、この方法でそれらにアクセスすることはできません。

ModelMapとModelの違いは何ですか

良い質問。ModelMapのjavadocには次のように書かれています。

同じ目的を果たすJava-5ベースのインターフェースバリアントのモデルインターフェースを確認してください

imhoModelインターフェイスは、モデルにオブジェクトを追加することだけを目的としているように見えます(モデルからの読み取りではありません)...editメソッドの場合と同じです。ただしasMap、モデルのコンテンツへのアクセスを許可するメソッドがあります。

Model私は自分でインターフェースを使ったことがありません。常に注入しModelMapます。

于 2012-12-17T06:43:36.323 に答える
1

これはうまくいくようです:

@RequestMapping(value = "/users/update")
    public String update(ModelMap model, @ModelAttribute("record") KCSUser record) {

        if (record.getId() == 0) {
            service.insert(record);
        }
        else {
            KCSUser existing = service.find(record.getId());
            existing.setUserName(record.getUserName());
            existing.setEmail(record.getEmail());
            //etc...
            service.update(existing);
        }

        return index(model);
    }
于 2012-12-17T06:35:44.033 に答える