Can @Valid annotate field validation recursively in spring mvc?

I am making a model object with some JSR-303 validation annotation:

public class UserInfoBasicModel  implements Serializable{
    @NotNull(message="cannot be null")
    @NotEmpty(message="cannot be empty")
    private String name;
    //getter and setter
    //..ignored..
}

Automatic data binding to the controller:

@Controller
@RequestMapping("/user")
public class UserController  {
    @RequestMapping(method = RequestMethod.POST, value = "/registry/")
    public String registry(HttpServletRequest request,
            ModelMap modelMap,
            @Valid UserInfoBasicModel userInfoBasicModel,
            BindingResult result)    {
        //...some code here...
    }
}

In the above scenario, it works great for validation. But when I encapsulate the model in another object, as shown below, checking for UserInfoBasicModel no longer works:

An object that encapsulates a UserInfoBasicModel object:

public static class UserUpdateFormTransmitter       {
    @Valid
    private UserInfoBasicModel userInfoBasicModel;
    //getter and setter
    //..ignored..
}

controller:

@Controller
@RequestMapping("/user")
public class UserController  {
    @RequestMapping(method = RequestMethod.POST, value = "/registry/")
    public String registry(HttpServletRequest request,
            ModelMap modelMap,
            @Valid UserUpdateFormTransmitter userUpdateFormTransmitter,
            BindingResult result)    {
        //...some code here...
    }
}

I am wondering why @valid annotaion works recursively in the same way as JSR 303: Bean Validation says.Could any one give me a solution so that I can recursively return my object, thanks a lot !!!!

+5
source share
2 answers

, this - @Valid.

+3

:

1. ModelAttribute, :

Java:

@RequestMapping(method = RequestMethod.POST, value = "/registry/")
public String registry(HttpServletRequest request,
            ModelMap modelMap,
            @ModelAttribute("userupdate") @Valid UserUpdateFormTransmitter userUpdateFormTransmitter,
            BindingResult result)

JSP:

<form:form method="POST" name="form1" action="/registry" modelAttribute="userupdate">

2. , path,

//for recursive access
<form:input type="text" id="name" path="userInfoBasicModel.name" />

<form:input type="text" id="name" value="${userInfoBasicModel.name}" /> 
0

All Articles