2011-09-23 5 views
7

Necesito validar los objetos que están almacenados en la lista en mi formulario bean object.¿Cómo hacer la validación de Hibernate en los objetos de lista anidados?

A continuación se muestra mi objeto form 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 
} 

y por debajo es mi objeto, que está presente en la lista de mi objeto principal forma de grano

public class Module implements Serializable { 

    private int id; 

    @NotBlank 
    private String moduleName; 

    // other properties and getters and setters 
} 

a continuación es mi archivo de propiedades

# -- Role form -- 
NotBlank.role.roleName=Role Name can not be blank. 
NotBlank.module.moduleName=Module Name can not be blank. 

abajo es mi página JSP, la formulario consiste en un nombre de función y módulos que se pueden agregar a la función.

<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>&nbsp;</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> 

puedo validar correctamente el nombre del rol es decir, cuando el nombre de función está en blanco aparece un mensaje de error, pero cuando el módulo no está seleccionada que no entiendo ningún mensaje de error.

Por favor, ayudar a

Respuesta

14

Adición @NotNull y @Size limitaciones a su lista de módulos debe ayudar:

@Valid 
@NotNull 
@Size(min = 1) 
private List<Module> modules; 

La anotación @Valid hace que los elementos de la colección comentada a ser validados, pero no valida que wether la colección no es nula o contiene elementos.

Cuestiones relacionadas