1

私はSpring mvc3を使用していますが、いくつかの概念と混同していることがわかったので、要約してここに投稿します。

  1. データバインディング。

アクションに Bean がある場合 (つまり、「Person」という名前)、次の URL が要求されたときに、前に struct2 を使用します。

http://localhost:8080/app/form?person.id=1&person.name=xxx&pet.name=yy

次に、Person の新しいインスタンスが作成され、パラメータ '1' と 'xxx' がこのインスタンスに入力されます。そして、Pet の新しいインスタンスが作成され、「yy」という名前がこの Bean に取り込まれます。

これが struct2 でのデータ バインディングの唯一の方法です。リクエストで beanname.property を指定します。

春の mvc3 では、データをバインドする 1 つの方法を知っています。

http://localhost:8080/app/form?id=1&name=xxx&other=yy

@RequestMapping('form')
public String form(Person person,BindingResult result){
    //now I get the person  
}

それでも機能しますが、いくつか質問があります。

1) リクエスト URL に 3 つのパラメーター「name」、「pass」、「other」があります。Spring はどのパラメーターを Bean (モデル) に入力する必要があるかをどのように認識しますか。

2) パラメータを struct2 の例のように複数のモデル (人とペットの両方) にバインドしたい場合はどうですか?

また、spring タグの「form」のmodelAttributeand属性は何を意味するのでしょうか?commandName

2.検証する

bean の場合 (例のゲッターとセッターは無視してください):

import javax.validation.constraints.NotNull;

public class Bean {
    @NotNull(message="id can not be null")
    private int     id;
}

私はこのコントローラーを使用します:

@RequestMapping("val")
public @ResponseBody
String validate(@Valid Bean bean, BindingResult result) {
    if (result.hasErrors()) {
        return result.getAllErrors() + "";
    } else
        return "no error";
}

「NotEmpty」のみが機能することがわかりました。このURLを使用する場合:

/val?name=xxx   ==> no error !! // id is null now,why it does not has error?

3. 型変換。

たとえば、次の URL をご覧ください。

http://localhost:8080/app/form?id=1&name=xxx&other=yy

IDを文字列値に設定すると、明らかに「NumberFormatException」がスローされます。

次に、この例外をどこでキャッチしますか? コントローラーの場合、各コントローラーに非常に多くの try-catch ブロックを書き込む必要があります。

なお、型変換例外は「NumberFormatException」だけに限らず、「dataformaterrorexception」などの場合もあります。

しかし、それらはすべて型変換に属しています。共通のソリューションを使用して処理するにはどうすればよいですか?

4

0 に答える 0