如何使用Spring MVC JSR-303 Validator将不同的模型类验证为一个表单 [英] How to Validate different model class into one form using Spring MVC JSR-303 Validator

查看:76
本文介绍了如何使用Spring MVC JSR-303 Validator将不同的模型类验证为一个表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 jsp 页面内有表格,如下所示:

I have form inside jsp page as below:

<springForm:form action="${addAction}" name="frm" method="post" commandName="employee">
    <table>
        <tr>
            <td><label>First Name</label>   </td>
            <td><springForm:input path="firstName" /></td>
            <td><springForm:errors path="firstName" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>Last Name</label></td>
            <td><springForm:input path="lastName" /></td>
            <td><springForm:errors path="lastName" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>Email</label>    </td>
            <td><springForm:input path="email" /></td>
            <td><springForm:errors path="email" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>Street</label>   </td>
            <td><springForm:input path="employeeDetail.street" /></td>
            <td><springForm:errors path="employeeDetail.street" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>City</label> </td>
            <td><springForm:input path="employeeDetail.city" /></td>
            <td><springForm:errors path="employeeDetail.city" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>State</label>    </td>
            <td><springForm:input path="employeeDetail.state" /></td>
            <td><springForm:errors path="employeeDetail.state" cssClass="error" /></td>
        </tr>
        <tr>
            <td><label>Country</label>  </td>
            <td><springForm:input path="employeeDetail.country" /></td>
            <td><springForm:errors path="employeeDetail.country" cssClass="error" /></td>
        </tr>
        <tr>
            <td colspan="2" style="text-align: center;">
                <input type="submit" value="Add Info" />
            </td>
        </tr>
    </table>
</springForm:form>

在此jsp名字中,姓氏和电子邮件属于模型类,即Employee。
最后所有属性如Street,City等属于EmployeeDetails模型类。

In this jsp First Name, Last Name and email belong to a model class i.e Employee. Last all attributes like Street, City etc belong to EmployeeDetails model class.

public class Employee {

private Long empId;

@Size(min=2, max=30)
private String firstName;

@Size(min=2, max=30)
private String lastName;

@NotEmpty @Email
private String email;

@DateTimeFormat(pattern="MM/dd/yyyy")
@NotNull @Past
private Date doj;

@Phone
private String phone;

private EmployeeDetail employeeDetail;

Getter/Setter
}

EmployeeDetail:

EmployeeDetail:

public class EmployeeDetail {

@Size(min=2, max=30)
private String street;

@Size(min=2, max=30)
private String city;

@Size(min=2, max=30)
private String state;

@Size(min=2, max=30)
private String country;
//Getter/Setter
}

我正在对两个模型进行验证在一个单一的形式。我的Cotroller映射是:

I am performing validation on both model inside a single form. My Cotroller mapping is:

@RequestMapping(value = "/saveEmpInfo", method = RequestMethod.POST)
public String saveEmployee(@Valid Employee employee,
        @Valid EmployeeDetail employeeDetail, BindingResult bindingResult) {
    employee.setEmployeeDetail(employeeDetail);
    if (bindingResult.hasErrors()) {
        System.out.println("Returning addInfo.jsp page");
        return "addInfo";
    }
    //future logic
}

但它不是工作得到错误请求。

But It's not working getting Bad Request.

推荐答案

要完成这项工作,您应该注明employeeDetails你的Employee.class中的@Valid是这样的:

To make this work you should annotate employeeDetails with @Valid in your Employee.class like this:

@Valid
private EmployeeDetail employeeDetail;

现在在控制器中你应该只使用这样的Employee对象:

And now in controller you should use just Employee object like this:

public String saveEmployee(@Valid Employee employee, BindingResult bindingResult) {

这篇关于如何使用Spring MVC JSR-303 Validator将不同的模型类验证为一个表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆