为什么 @vaild 注释在我的 spring MVC 应用程序中不起作用?我搜索了很多,但找不到解决方案
Why @vaild annotation is not working in my spring MVC application? I searched a lot, but couldn't find solution
基本上,如果字段无效,它应该 return 一条消息。但就我而言,它在这里不起作用!!
下面是我的控制器class。
@Controller
public class StoreController {
private NearByStoreInterface getmestore;
@Inject
public StoreController(NearByStoreInterface getmestore) {
this.getmestore=getmestore;
}
@RequestMapping(value = "/nearbystore", method = RequestMethod.GET)
public String display(Model m)
{
final ControllerTolibModel userDetails=ControllerTolibModel.builder().build();
m.addAttribute("user", userDetails);
return "formTosubmit";
}
@RequestMapping(value="/nearbystore", method=RequestMethod.POST)
public String submit(@Valid @ModelAttribute("user") ControllerTolibModel userDetails,BindingResult errors,Model m)
{
if(errors.hasErrors())
return "formTosubmit";
final List<StoresDetails> storedetails=getmestore.getmeStore(userDetails);
if(storedetails.size()==0)
return "nostores";
m.addAttribute("details", storedetails);
return "viewStoreDetails";
}
}
此处@valid 无效。同样在它下面的是 controllerTolibModel 的 modelClass 。
package com.amazon.lib;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ControllerTolibModel {
@NotBlank
private String pincode;
@NotNull
@Min(1)
@Max(100)
private Double radius;
@NotNull
private String category;
}
这是一个 formTosubmit.jsp 文件。如果能帮助你了解更多。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<h2> Enter details here...</h2>
<body>
<form:form action="nearbystore" method="post" modelAttribute="user">
Enter your pincode : <form:input path="pincode"/><br><br>
<form:errors path="pincode" cssClass="text-danger"/>
Enter radius in KM : <form:input path="radius"/><br><br>
Select category of store : <form:select path="category">
<form:option value="all" label="all"/>
<form:option value="grocery" label="grocery"/>
<form:option value="garments" label="garments"/>
<form:option value="electronics" label="electronics"/>
<form:option value="Dairy" label="Dairy"/>
<form:option value="QSR" label="QSR"/>
</form:select><br><br>
<input type="submit" name="submit"/>
</form:form>
</form>
</body>
</html>
提前致谢!
您需要在类路径中实现 Bean Validation in your classpath for @Valid
to work. For example, add Hibernate Validator。
Gradle
compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.1.5.Final'
Maven
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
基本上,如果字段无效,它应该 return 一条消息。但就我而言,它在这里不起作用!!
下面是我的控制器class。
@Controller
public class StoreController {
private NearByStoreInterface getmestore;
@Inject
public StoreController(NearByStoreInterface getmestore) {
this.getmestore=getmestore;
}
@RequestMapping(value = "/nearbystore", method = RequestMethod.GET)
public String display(Model m)
{
final ControllerTolibModel userDetails=ControllerTolibModel.builder().build();
m.addAttribute("user", userDetails);
return "formTosubmit";
}
@RequestMapping(value="/nearbystore", method=RequestMethod.POST)
public String submit(@Valid @ModelAttribute("user") ControllerTolibModel userDetails,BindingResult errors,Model m)
{
if(errors.hasErrors())
return "formTosubmit";
final List<StoresDetails> storedetails=getmestore.getmeStore(userDetails);
if(storedetails.size()==0)
return "nostores";
m.addAttribute("details", storedetails);
return "viewStoreDetails";
}
}
此处@valid 无效。同样在它下面的是 controllerTolibModel 的 modelClass 。
package com.amazon.lib;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ControllerTolibModel {
@NotBlank
private String pincode;
@NotNull
@Min(1)
@Max(100)
private Double radius;
@NotNull
private String category;
}
这是一个 formTosubmit.jsp 文件。如果能帮助你了解更多。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<h2> Enter details here...</h2>
<body>
<form:form action="nearbystore" method="post" modelAttribute="user">
Enter your pincode : <form:input path="pincode"/><br><br>
<form:errors path="pincode" cssClass="text-danger"/>
Enter radius in KM : <form:input path="radius"/><br><br>
Select category of store : <form:select path="category">
<form:option value="all" label="all"/>
<form:option value="grocery" label="grocery"/>
<form:option value="garments" label="garments"/>
<form:option value="electronics" label="electronics"/>
<form:option value="Dairy" label="Dairy"/>
<form:option value="QSR" label="QSR"/>
</form:select><br><br>
<input type="submit" name="submit"/>
</form:form>
</form>
</body>
</html>
提前致谢!
您需要在类路径中实现 Bean Validation in your classpath for @Valid
to work. For example, add Hibernate Validator。
Gradle
compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.1.5.Final'
Maven
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>