Spring mvc 如何对嵌套列表对象执行Hibernate验证?
我需要验证存储在表单bean对象列表中的对象Spring mvc 如何对嵌套列表对象执行Hibernate验证?,spring-mvc,nested-attributes,hibernate-validator,Spring Mvc,Nested Attributes,Hibernate Validator,我需要验证存储在表单bean对象列表中的对象 public class Role implements java.io.Serializable { // Fields private int roleId; @NotBlank private String roleName; private boolean active; @Valid private List<Module> modules; //
public class Role implements java.io.Serializable {
// Fields
private int roleId;
@NotBlank
private String roleName;
private boolean active;
@Valid
private List<Module> modules;
// getters anfd setters
}
下面是我的表单bean对象
public class Role implements java.io.Serializable {
// Fields
private int roleId;
@NotBlank
private String roleName;
private boolean active;
@Valid
private List<Module> modules;
// getters anfd setters
}
下面是我的属性文件
# -- Role form --
NotBlank.role.roleName=Role Name can not be blank.
NotBlank.module.moduleName=Module Name can not be blank.
下面是我的JSP页面,表单由角色名称和可添加到角色的模块组成
<table border="0" class="section_tbl2">
<tr>
<td width="150px" valign="top">
<spring:message code="dmx.role.form.label.name"/>
</td>
<td width="10px">:</td>
<td>
<form:input class="txtinput" id="roleName" path="roleName" maxlength="50"/> <form:errors path="roleName" cssClass="error"/>
</td>
</tr>
<tr><td colspan="3" height="8px"></td></tr>
<tr>
<td width="150px" vAlign="top">
Modules
</td>
<td width="10px" vAlign="top">:</td>
<td>
<table>
<tr>
<td>
<input type="button" value="<spring:message code="dmx.role.form.button.addModule.label"/>" onclick="return addModuleRow();"></input>
</td>
</tr>
<tr><td> </td></tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" class="tblstyle1" id="moduleTable">
<thead>
<tr>
<th class="fst" width="200px">
<spring:message code="dmx.role.form.label.moduleName"/>
</th>
<th width="50px"><spring:message code="dmx.role.form.label.create"/></th>
<th width="50px"><spring:message code="dmx.role.form.label.update"/></th>
<th width="50px"><spring:message code="dmx.role.form.label.delete"/></th>
<th width="30px"></th>
</tr>
</thead>
<tbody id="moduleTBody">
<c:forEach items="${role.modules}" var="module" varStatus="status" >
<c:set var="moduleCounter" value="${status.index}"/>
<tr id="moduleRowId_${moduleCounter}">
<td class="fst txt-center">
<form:select onchange="checkIfThisModuleAlreadySelected(this);" class="seloption" id="selectedModule_${moduleCounter}" path="modules[${moduleCounter}].id">
<form:option value="" label="-- Select Module --"/>
<form:options items="${moduleList}" itemLabel="moduleName" itemValue="id" />
</form:select>
</td>
<td class="txt-center">
<form:checkbox id="create_${moduleCounter}" path="modules[${moduleCounter}].create"/>
</td>
<td class="txt-center">
<form:checkbox id="update_${moduleCounter}" path="modules[${moduleCounter}].update"/>
</td>
<td class="txt-center">
<form:checkbox id="delete_${moduleCounter}" path="modules[${moduleCounter}].delete"/>
<td class="txt-center">
<input class="delbtn" id="moduleDelBtn_${moduleCounter}" name="moduleDelBtn[${moduleCounter}]" type="button" onclick="delModuleRow(${moduleCounter});">
</td>
</tr>
</c:forEach>
</tbody>
</table>
</td>
</tr>
<tr><td colspan="3" height="3px"></td></tr>
</table>
:
模块
:
我可以成功验证角色名称,即当角色名称为空时,我会收到错误消息,但当未选择模块时,我不会收到任何错误消息
请帮助将
@NotNull
和@Size
约束添加到模块列表中应有助于:
@Valid
@NotNull
@Size(min = 1)
private List<Module> modules;
@有效
@NotNull
@尺寸(最小值=1)
私有列表模块;
@Valid
注释会验证带注释集合的元素,但不会验证集合是否为null或是否包含任何元素