2014-09-08 2 views
0

Я новичок в Spring и у меня проблема с проверкой формы. В моей форме редактирования я хочу проверить только определенные поля, а не все поля, аннотированные в моей сущности. Например, если у меня UserEntity с полями:Java Spring: как проверять только определенные поля из моего объекта

@Entity 
@Table(name = "users") 
public class UserEntity { 

@Id 
@Column(name = "user_id") 
@GeneratedValue 
public int user_id; 

@NotEmpty 
@Column(name = "userlogin") 
public String userlogin; 

@NotEmpty 
@Column(name = "userpass") 
public String userpass; 

@NotEmpty 
@Column(name = "name") 
public String name; 

@Email 
@NotEmpty 
@Column(name = "email") 
public String email; 

@NumberFormat(style = Style.NUMBER) 
@NotEmpty 
@Column(name = "phone") 
public String phone; 

и когда я зарегистрироваться форму, мне нужно проверить все поля, и это работает отлично. Но когда я редактирую пользовательскую форму, я хочу редактировать и проверять только «имя», «письмо» и «телефон», я не хочу менять «userlogin» и «userpass». Но форма редактирования не пройдет успешно, потому что BindingResult проверяет все поля. Вот моя форма редактирования:

<springForm:form action="/mywebapp/user/edit" commandName="user" method="POST"> 
    <table>  
     <tr> 
      <td>Name:</td> 
      <td><springForm:input path="name" value="${user.name}" /></td> 
      <td><springForm:errors path="name" cssClass="error" /></td> 
     </tr> 
     <tr> 
      <td>E-mail:</td> 
      <td><springForm:input path="email" value="${user.email }" /></td> 
      <td><springForm:errors path="email" cssClass="error" /></td> 
     </tr> 
     <tr> 
      <td>Phone:</td> 
      <td><springForm:input path="phone" value="${user.phone}" /></td> 
      <td><springForm:errors path="phone" cssClass="error" /></td> 

     </tr> 
     <tr> 
      <td><input type="submit" value="Edit" /></td> 
     </tr> 
    </table> 
</springForm:form> 

Вот мой метод контроллера:

@RequestMapping(value="user/edit", method=RequestMethod.POST) 
public String doUserEdit(@Valid @ModelAttribute("user") UserEntity user, BindingResult result, Principal principal) { 

    if(result.hasErrors()) { 
     return "user/edit"; 
    } 
    UserEntity u = this.userService.getUser(principal.getName()); 


    this.userService.editUser(u.getUser_id(), user); 

    return "redirect:/user"; 
} 

result.hasError() всегда возвращает истину, потому что проверка также 'Userlogin' и 'UserPass'.

Как игнорировать другие поля в форме редактирования и проверять только те поля, которые я хочу?

+0

создать собственный класс валидатора, реализовав интерфейс Validator и вызвать метод проверки вручную. – Rembo

ответ

1

Я обычно создаю отдельный класс формы, который подходит только для обработки представления формы и поставить все необходимые проверки там:

public class UserUpdateForm { 
    @NotEmpty 
    private String name; 
    @Email 
    private String email; 
    @NotEmpty 
    @NumberFormat(style = Style.NUMBER) 
    private String phone; 

    //Getters and setters here 
} 

Идея заключается в том, что вы отвязать свой класс модели из представлений (форма) классов. Единственным недостатком является то, что вам придется обрабатывать преобразования между объектами формы и объектами модели. Что-то вроде dozer может помочь.

Смежные вопросы