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。

现在在 spring mvc3 中,我知道一种绑定数据的方法:

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“name”,'pass','other'中有三个参数,spring如何知道应该将哪些参数填充到我的bean(模型)中。

2) 如果我想将参数绑定到多个模型,如 struct2 中的示例(人和宠物),该怎么办?

此外,spring标签“form”中的modelAttributeand属性是什么意思?commandName

2. 验证

对于 bean(忽略示例中的 getter 和 setter):

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”有效。因为如果我使用这个网址:

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

3.类型转换。

以这个网址为例:

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

显然,如果我将 id 设置为字符串值,它会抛出“NumberFormatException”。

那么在哪里捕获这个异常呢?如果在控制器中,那么我必须在每个控制器中编写这么多的 try-catch 块。

此外,类型转换异常不仅限于'NumberFormatException',还可能是'dataformaterrorexception'等。

但是它们都属于类型转换,使用通用解决方案如何处理?

4

0 回答 0