Java 控件类中的Spring MVC@Valid注释导致glassfish服务器引发异常
我已经在netbeans 8.2中创建了SpringMVC项目。控制器类如图所示:Java 控件类中的Spring MVC@Valid注释导致glassfish服务器引发异常,java,spring,validation,spring-mvc,glassfish,Java,Spring,Validation,Spring Mvc,Glassfish,我已经在netbeans 8.2中创建了SpringMVC项目。控制器类如图所示: @Controller public class FormController { @InitBinder public void initBinder(WebDataBinder binder) { binder.setAllowedFields(new String[] { "userName", "password", "confirmPassword", "firstName", "lastName",
@Controller
public class FormController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAllowedFields(new String[] {
"userName", "password", "confirmPassword", "firstName",
"lastName", "email", "Marketing", "legalConfirmation","myAddress" });
}
@RequestMapping(value="new",method= RequestMethod.GET)
public String handleregistration(Model model){
model.addAttribute("userdatabean",new UserDetails());
return "Registration";
}
@RequestMapping(value="Registration",method=RequestMethod.POST)
public ModelAndView Gatherdata(@Valid
@ModelAttribute("userdatabean")UserDetails
data,BindingResult error,ModelMap modelmap)throws Exception{
if(error.hasErrors()){
ModelAndView modelerror=new ModelAndView("Registration");
return modelerror;
}
ModelAndView dataModel=new ModelAndView("success");
dataModel.addObject("registration", data);
return dataModel;
}
}
注册表格如下所示:
%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Registration</title>
<style>
.error{
color: red; font-weight: bold;
}
</style>
</head>
<body>
<form:form action="Registration" modelAttribute="userdatabean" >
<h1>New user Registration</h1>
<div>UserName: <form:input path="userName"/>
<form:errors path="userName" cssClass="error"/>
</div>
<div> Email: <form:input path="email"/>
<form:errors path="email" cssClass="error"/>
</div>
<div> Address:<form:input path="myAddress.StreetName"/>
<form:errors path="myAddress.StreetName" cssClass="error"/>
</div>
<div> first Name: <form:input path="firstName"/>
<form:errors path="firstName" cssClass="error"/>
</div>
<div> Last Name: <form:input path="lastName"/>
<form:errors path="lastName" cssClass="error"/>
</div>
<div> Password:<form:password path="Password"/>
<form:errors path="Password" cssClass="error"/>
</div>
<div> Confirm Password:<form:password path="confirmPassword"/>
<form:errors path="confirmPassword" cssClass="error"/>
</div>
<div><form:checkbox id="Marketing" path="Marketing"/>Please send
me information via email
<form:errors path="Marketing" cssClass="error"></form:errors>
</div>
<div><form:checkbox id="legalConfirmation"
path="legalConfirmation"/>I accept the terms of use
<form:errors path="legalConfirmation" cssClass="error"/>
</div>
<div><input type="submit" value="Register"/></div>
</form:form>
</body>
</html>
成功页面如下:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registration Successful</title>
</head>
<body>
<h4>successful registration of user</h4>
<table>
<tr>
<td>
Student Username:
</td>
<td>${registration.userName}</td>
</tr>
<tr>
<td>
Student last name:
</td>
<td>${registration.lastName}</td>
</tr>
<tr>
<td>
Student first name:
</td>
<td>${registration.firstName}</td>
</tr>
<tr>
<td>
Student email:
</td>
<td>${registration.email}</td>
</tr>
<tr>
<td>
Student address:
</td>
<td>${registration.myAddress.StreetName}</td>
</tr>
</table>
</body>
</html>
当我在没有@Valid注释的情况下输入相同的法律参数时,不会引发异常。把它插回去,它就会抛出。请协助解决。我正在学习这个框架,所以可能不擅长它。我已经包括了jars validation-api-1.0.0.GA.jar、hibernate-validator-annotation-processor-4.1.0.Final.jar。右键单击您的项目,选择“属性”
转到“库”选项卡“处理器” 您转储了所有代码,但忘记了重要的部分—实际的异常…消息:内部服务器错误描述:服务器遇到了一个内部错误,使其无法满足此请求。异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1根本原因java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1类型异常报告消息内部服务器错误描述服务器遇到内部错误,无法满足此请求。异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1根本原因java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1请注意,GlassFish Server开源版本4.1.1日志中提供了异常及其根本原因的完整堆栈跟踪。请编辑您的问题和格式适当性不要添加为注释,因为这样会使其不可读。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registration Successful</title>
</head>
<body>
<h4>successful registration of user</h4>
<table>
<tr>
<td>
Student Username:
</td>
<td>${registration.userName}</td>
</tr>
<tr>
<td>
Student last name:
</td>
<td>${registration.lastName}</td>
</tr>
<tr>
<td>
Student first name:
</td>
<td>${registration.firstName}</td>
</tr>
<tr>
<td>
Student email:
</td>
<td>${registration.email}</td>
</tr>
<tr>
<td>
Student address:
</td>
<td>${registration.myAddress.StreetName}</td>
</tr>
</table>
</body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org
/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.Ricko.Controller"/>
</beans>
dispatcher threw exception
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at org.springframework.validation.
AbstractErrors.isMatchingFieldError(AbstractErrors.java:236)
at org.springframework.validation.AbstractBindingResult.
getFieldError(AbstractBindingResult.java:216)
at org.springframework.validation.beanvalidation.
SpringValidatorAdapter.processConstraintViolations
(SpringValidatorAdapter.
java:122)
g.springframework.validation.beanvalidation.SpringValidatorAdapter.
validate(SpringValidatorAdapter.java:108)
g.springframework.validation.DataBinder.validate(DataBinder.java:760)
at
org.springframework.web.method.annotation.ModelAttributeMethodProcessor
.validateIfApplicable(ModelAttributeMethodProcessor.java:161)
at org.springframework.web.method.annotation.
ModelAttributeMethodProcessor
.resolveArgument(ModelAttributeMethodProcessor.java:109)
org.springframework.web.method.support.
HandlerMethodArgumentResolverComposite.resolveArgument
(HandlerMethodArgumentResolverComposite.java:79)
at org.springframework.web.method.support.
InvocableHandlerMethod.getMethodArgumentValues
(InvocableHandlerMethod.java:157)
at org.springframework.web.method.support.
InvocableHandlerMethod.invokeForRequest
(InvocableHandlerMethod.java:124)
at org.springframework.web.servlet.mvc.method.annotation.
ServletInvocableHandlerMethod.invokeAndHandle
(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.invokeHandleMethod
(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.handleInternal
(RequestMappingHandlerAdapter.java:690)
at org.springframework.web.servlet.mvc.method.
AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.
doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.
doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.
processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost
(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.
service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service
(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:214)
at org.glassfish.tyrus.servlet.TyrusServletFilter.
doFilter(TyrusServletFilter.java:305)
at org.apache.catalina.core.ApplicationFilterChain.
internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.
invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.
invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.
doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.
invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.
invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.
invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.
doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.
service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.
ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.
service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.
runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.
doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.
handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.
execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.
execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.
fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.
fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.
run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.
access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.
WorkerThreadIOStrategy$WorkerThreadRunnable.
run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.
doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.
run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:745)