2

我有一个带有多个模型的 spring mvc 表单。ColorShade

我正在使用休眠验证器,当我只有一个模型时,验证工作得很好。根据我的研究,我发现拥有多个具有 spring mvc 形式的模型的最佳方法是创建一个包含两个模型的新模型。所以我做了:

楷模

public class ColorShade {

    private Color color;
    private Shade shade;

    //getter setters
}

public class Color {
  @NotEmpty
  private String name;
  //getter setters
}

public class Shade {
  @NotEmpty
  private String shadeName;
  //getter setters
}

控制器

@RequestMapping(method = RequestMethod.POST)
public String validateForm(
        @ModelAttribute("COLORSHADE") @Valid ColorShade colorShade,
        BindingResult result, Map model) {
    if (result.hasErrors()) {
        return "myForm";
    }

    return "success";
}

看法

<form:form method="post" commandName="COLORSHADE" cssClass="form-horizontal" >
    <spring:bind path="COLORSHADE.color.name">
        <div class="control-group ${status.error ? 'error' : ''}">
            <label class="control-label">Color Name</label>
            <div class="controls">
                <form:input path="${status.expression}"/>
            </div>
        </div>
    </spring:bind>
    <spring:bind path="COLORSHADE.shade.shadeName">
        <div class="control-group ${status.error ? 'error' : ''}">
            <label class="control-label">Shade Name</label>
            <div class="controls">
                <form:input path="${status.expression}"/>
            </div>
        </div>
    </spring:bind>
</form>

问题

  • 上述设置有效,但验证现在不起作用。我怎样才能让验证工作?
  • 如果我只有单个模型并删除环绕ColorShade模型,那么验证工作得非常好。我怎样才能让单一形式的多个模型和验证都正常工作?
4

1 回答 1

2

尝试:

public class ColorShade {
    @Valid
    private Color color;
    @Valid
    private Shade shade;

    //getter setters
}

http://beanvalidation.org/1.0/spec/#d0e991

于 2013-05-13T15:22:25.853 回答