0

私は次の設定をしました:

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)

私のセットアップで何が間違っている可能性がありますか???

4

1 に答える 1

1

空の値を明示的に禁止します。

    @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>

一部の検証ルールのみをチェックする場合は、「検証グループ」を使用できます。


コントローラ メソッドが呼び出されないことが問題である場合は、 の@Valid注釈が原因ですEmail。注釈付きのパラメーターが無効な場合にコントローラーメソッドをイベントとして呼び出す場合は、そのパラメーターの直後@Validに型のパラメーターが必要です。BindingResult

public String doSaveEmail(@Valid @ModelAttribute("email") Email email, BindingResult resultForEmail, Model model, BindingResult resultForModel)
于 2012-09-21T14:48:50.487 に答える