2017-11-01 6 views
0

Hibernate Validatorを使用して単純な検証フォームを作成しようとしています。 Customerクラスには2つのフィールドがあり、そのうちの1つを必須(lastName)にします。 このフィールドを埋めていなくてもエラーメッセージが表示されず、BindingResultにエラーが含まれていないということです。私のコードに何か不足していますか?Hibernate Validator @NotNullが正しく動作しません。

ここは私の顧客クラスのスニペットです。

public class Customer { 

    private String firstName; 

    @NotNull(message = "is required") 
    @Size(min = 1, message = "is required") 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

ここコントローラ

@Controller 
@RequestMapping("/customer") 
public class CustomerController { 

    //adding new customer to model 
    @RequestMapping("/showForm") 
    public String showForm(Model theModel){ 

     theModel.addAttribute("customer", new Customer()); 

     return "customer-form"; 
    } 

    //Validating passed customer attribute/object 
    //Biding result object holds validation results 
    @RequestMapping("/processForm") 
    public String processForm(
      @Valid @ModelAttribute("customer") Customer theCustomer, BindingResult theBindingResult) { 

     if (theBindingResult.hasErrors()){ 
      return "customer-form"; 
     } 

     return "customer-confirmation"; 
    } 
} 

EDITある:フォームコード:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>Customer Registration Form</title> 
</head> 
<body> 

<style> 
    .error{color: red} 
</style> 


<i> Fill out the form. Asteriks (*) means required. </i> 
<br><br> 
<form:form action="processForm" modelAttribute="customer"> 

    First name: <form:input path="firstName" /> 

    <br><br> 

    Last name (*): <form:input path="lastName"/> 
    <form:errors path="lastName" cssClass="error" /> 
    <input type="submit" value="Submit"/> 

</form:form> 

</body> 
</html> 

EDIT 2: I検証-api.jarとをクラスパスに追加は、(抽象APIとアノテーションを含んでスキャナ)。

また、@InitBinnderを挿入するだけで、空のフォームフィールドが常にnullでないことを確認します。String

@InitBinder 
public void initBinder(WebDataBinder dataBinder) { 

    StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true); 

    dataBinder.registerCustomEditor(String.class, stringTrimmerEditor); 
} 

しかし、まだ、これらの注釈がすべて

EDIT 3でトリガしない飽きないようです:

org.springframework.web.util.NestedServletException:エンティティ上でバリデータを呼び出した後、私はエラーを取得しています:要求処理に失敗しました。ネストされた例外はjavax.validation.NoProviderFoundExceptionです:Bean検証プロバイダが見つからないため、コンフィグレーションを作成できません。クラスパスにHibernate Validator(RI)のようなプロバイダを追加してください。追加春の設定ファイル::私は

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
Validator validator = factory.getValidator(); 
validator.validate(theCustomer); 

EDIT 4クラスパスにこれを追加しているが

のweb.xmlを

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1"> 

    <display-name>mvc-validation-demo</display-name> 

    <!-- Spring MVC Configs --> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/mvc-validation-demo.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

MVC-検証-demo.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc.xsd 
      http://www.springframework.org/"> 

    <context:component-scan base-package="com.lobo.mvc" /> 

    <mvc:annotation-driven/> 

    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/view/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

</beans> 

EDIT 5:私は私のMVC検証-demo.xmlに付加言っ@eis何によると:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalVa‌​lidatorFactoryBean"/‌​> 

、私はまた私のクラスパスにHibernateバリを持っている:

Classpath

が、エラーがまだ残っています

+0

だから、顧客のlastNameの値は何ですか?その長さは何ですか? –

+0

私のフォームには何も価値がありません。したがって、長さは0です。 – Mitsuomi

+0

'theCustomer.getLastName()。length()'の値が出力され、出力が0だったので、0と思うか知っていますか?ここで説明されている検証を有効にしましたか:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-beanvalidation-spring? –

答えて

0

.ideaを削除すると、キャッシュと新しい設定が消去されました。何とかhibernate-validator.jarが見えなかったようです。

寄付いただきました皆様、ありがとうございます。

関連する問題