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.LocalValidatorFactoryBean"/>
、私はまた私のクラスパスにHibernateバリを持っている:
が、エラーがまだ残っています
だから、顧客のlastNameの値は何ですか?その長さは何ですか? –
私のフォームには何も価値がありません。したがって、長さは0です。 – Mitsuomi
'theCustomer.getLastName()。length()'の値が出力され、出力が0だったので、0と思うか知っていますか?ここで説明されている検証を有効にしましたか:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-beanvalidation-spring? –