[英]Spring MVC + Spring framework 3 + Hibernate 4 + maven 3 in STS of Eclipse 4.3
[英]Spring mvc 3.1 with hibernate 4.3 validation and errors
我有以下設置:
IndexCntl.java(控制器):
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, ModelMap map) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
map.addAttribute("serverTime", formattedDate );
map.addAttribute("email", new Email());
Map sexoOpts = new HashMap();
sexoOpts.put("M", "Homem");
sexoOpts.put("F", "Mulher");
map.addAttribute("sexoList", sexoOpts);
return "index";
}
@RequestMapping(value = "/save-email", method = RequestMethod.POST)
public String doSaveEmail(@Valid @ModelAttribute("email") Email email, Model model, BindingResult result){
log.info("Email debug: "+email.getEmail()+" "+email.getMysexy()+" "+email.getWantedsexy());
if (result.hasErrors()){
log.info("Entrou result.hasError()");
return "index";
}
Date date = new Date();
email.setCreationDate(date);
try{
emailBo.saveEmail(email);
}catch(Exception e){
e.printStackTrace();
}
model.addAttribute("email", new Email());
return "index";
}
index.jsp(視圖):
<form:form action="save-email" method="POST" modelAttribute="email" cssStyle="display:-webkit-box">
<form:select path="mysexy" cssStyle="width:120px;">
<form:option value="" label="- Sou -"/>
<form:options items="${sexoList}" />
</form:select>
<form:errors path="mysexy" cssClass="errors"/>
<form:select path="wantedsexy" cssStyle="width:120px;">
<form:option value="" label="- Busco -"/>
<form:options items="${sexoList}" />
</form:select>
<form:errors path="wantedsexy" cssClass="errors"/>
<br/>
<form:errors path="wantedsexy" cssClass="errors"/>
<div class="input-append">
<input type="text" id="email" name="email" size="30" maxlength="30" placeholder="E-mail" class=""/>
<form:errors path="email" cssClass="errors"/>
<input id="btncadastrar" class="btn btn-block btn-primary" type="submit" value="Cadastrar E-mail"/>
</div>
</form:form>
以及模型Email.java的一部分:
@Document
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class Email extends BaseBean {
// @Pattern(regexp =
// "^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$",
// message="E-mail com formato incorreto.")
@NotNull(message = "Não pode ser vazio")
@NotEmpty(message = "Não pode ser vazio-nulo")
@org.hibernate.validator.constraints.Email(message = "E-mail inválido")
private String email;
@NotEmpty(message = "Informe ao menos um valor")
private String mysexy;
@NotEmpty(message = "Informe ao menos um valor")
private String wantedsexy;
當我嘗試通過輸入中的空電子郵件傳遞時,我收到此錯誤:
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'email' on field 'email': rejected value []; codes [NotEmpty.email.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [email.email,email]; arguments []; default message [email]]; default message [Não pode ser vazio-nulo]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'email' on field 'email': rejected value []; codes [NotEmpty.email.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [email.email,email]; arguments []; default message [email]]; default message [Não pode ser vazio-nulo]
org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:110)
我的設置有什么問題???
您明確禁止空值:
@NotNull(message = "Não pode ser vazio")
--> @NotEmpty(message = "Não pode ser vazio-nulo")
@org.hibernate.validator.constraints.Email(message = "E-mail inválido")
private String email;
Hibernate在保存或更新之前驗證實體,您的實體將失敗。
您可以在persistence.xml
文件配置中禁用此驗證。
<persistence ...>
<persistence-unit ...>
...
<properties>
<property name="javax.persistence.validation.mode" value="none"/>
</properties>
</persistence-unit>
</persistence>
如果您只想檢查一些驗證規則,則可以使用“驗證組”
如果您的問題是未調用controller方法,則是因為Email
的@Valid
注釋。 如果想要帶有@Valid
注釋的參數無效的事件時要調用控制器方法,則該參數直接需要BindingResult
類型的參數
public String doSaveEmail(@Valid @ModelAttribute("email") Email email, BindingResult resultForEmail, Model model, BindingResult resultForModel)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.