【发布时间】:2012-03-29 05:43:39
【问题描述】:
我已经坚持了大约一个小时,这不是我第一次这样做,但我无法弄清楚。
它应该向我显示表单错误,而不是抛出这个异常。
LE:同时我设法解决了异常,但我仍然看不到错误。它们没有被渲染
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 错误 字段“名称”上的对象“类别”中的字段错误:拒绝值 [jk];代码 [Range.category.name,Range.name,Range.java.lang.String,Range];参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [category.name,name];论据 [];默认消息 [名称],25,3];默认消息 [gfhghj] 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:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
@Controller
@RequestMapping("/category")
public class CategoryController {
@Autowired
StockGateway stockGateway;
@RequestMapping(value = "add", method = RequestMethod.POST)
public String addCategory(@Valid @ModelAttribute("category") CategoryAdd category, ModelMap model,
BindingResult binding) {
if (binding.hasErrors()) {
return "category.add";
}
CategoryDTO dto = Converter.toCategory(category);
try {
stockGateway.createCategory(dto);
} catch (StockGatewayException e) {
e.printStackTrace();
}
return "redirect:/category/add";
}
@RequestMapping(value = "add", method = RequestMethod.GET)
public String initView(ModelMap model) {
model.put("category", new CategoryAdd());
return "category.add";
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:spring="http://www.springframework.org/tags"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:security = "http://www.springframework.org/security/tags"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"
xmlns:form="http://www.springframework.org/tags/form"
version="2.0">
<security:authorize access="hasRole('ROLE_STOCK')" var="isStock">
<form:form modelAttribute="category" method="POST" action="add" >
<table>
<tr>
<td>Name :</td> <td> <form:input path="name" /></td>
</tr>
<tr>
<td></td> <td> <form:errors path="name" cssClass="error" /></td>
</tr>
</table>
<form:button>Add</form:button>
</form:form>
</security:authorize>
public class CategoryAdd {
@Range(min= 3 , max = 25, message="gfhghj")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
【问题讨论】:
-
你确定
binding.hasErrors()是真的吗? -
是的。我正在使用瓷砖。这和它有什么关系吗?
-
是的,如果
binding.hasErrors()为假,您将被重定向到 GET 而不是从 POST 返回,此时任何请求数据都会丢失。更不用说实际上没有错误:) -
您是否尝试将 @Range 放在 getter 上?
标签: java spring spring-mvc