簡體   English   中英

Spring MVC 3.1具有Hibernate 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM