java.lang.IllegalStateException:BindingResult和bean名称'register'的普通目标对象都不能作为请求属性使用

时间:2015-09-03 13:31:05

标签: java spring spring-mvc spring-form

我正在学习春天并且有一点问题。我有3个实体来实现相同的表单。我按照另一个主题创建了一个新类来处理所有。 我做到了,但我收到了错误。 可以帮帮我吗?

错误:

HTTP Status 500 - An exception occurred processing JSP page /WEB-INF/views/index/cadastro.jsp at line 31

type Exception report

message An exception occurred processing JSP page /WEB-INF/views/index/cadastro.jsp at line 31

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/index/cadastro.jsp at line 31

28:                     </div>
29:                     <div class="col-md-8">
30:                     <div class="col-md-12">
31:                       <form:input type="text" required= "true" style= "border: 2px solid #DDDDDD" class="input-xxlarge" path="user.fullname" />
32:                        
33:                       </div>
34:                       </div>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:464)
    org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:172)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:168)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'register' available as request attribute
    org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132)
    org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116)
    org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)
    org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
    org.apache.jsp.WEB_002dINF.views.index.cadastro_jsp._jspx_meth_form_005finput_005f0(cadastro_jsp.java:1077)
    org.apache.jsp.WEB_002dINF.views.index.cadastro_jsp._jspService(cadastro_jsp.java:328)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:431)
    org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:172)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:168)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)

UserController.Java

@Controller
@RequestMapping("user")
public class UserController {

    private static final Logger LOGGER = Logger.getLogger(UserController.class);

    @Autowired
    private UserService service;

    @Autowired
    private EnderecoService enderecoService;
    @Autowired
    private TelefoneService telefoneService;

    @InitBinder
    protected void initBinder(ServletRequestDataBinder binder) {
        binder.registerCustomEditor(Perfil.class, new PerfilConverter());

    }

    @RequestMapping("/add")
    public String userPage(@ModelAttribute("register") RegisterForm registerForm) {

        LOGGER.debug("Accessed userAdd page!");

        return "index/cadastro";
    }

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("register") RegisterForm registerForm) {


        LOGGER.debug("Saving a new user...");

        User oldUser = service.findUserByEmail(registerForm.user.getEmail());


        if (oldUser != null) { 
            return new ModelAndView("index/cadastro", "error", "This email already exists, try a new email!");
        }

        if (!registerForm.user.getPassword().equals(registerForm.user.getPasswordRepeated())) {
            return new ModelAndView("index/cadastro", "error", "Passwords do not match!, try again!");
        }
        registerForm.user.addEndereco(registerForm.endereco);
        registerForm.user.addPhone(registerForm.telefone);
        String email = registerForm.user.getEmail();

        service.createUser(registerForm.user);
        enderecoService.save(registerForm.endereco, email);
        telefoneService.save(registerForm.telefone, email);
        return new ModelAndView("redirect:/auth/form");
    }

    @RequestMapping("/{id}")
    public ModelAndView getUser(@PathVariable("id") Long id, ModelMap model) {

        LOGGER.debug("Getting user by id {" + id + "}");

        User user = service.findById(id);

        model.addAttribute("register", user);

        return new ModelAndView("register", model);
    }

    @RequestMapping("/list")
    public ModelAndView getUsers(ModelMap model) {

        LOGGER.debug("List of Users");

        model.addAttribute("users", service.findUsers());

        return new ModelAndView("users", model);
    }

}

RegisterForm.java

public class RegisterForm {

    public User user;
    public Telefone telefone;
    public Endereco endereco;


}

Cadastro.jsp

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
    <!DOCTYPE html>
    <html lang="pt-br">
    <head>
    <meta charset="UTF-8">
    <title>Consultora Online</title>
        </head>
        <body>
            <%@include file="../header.jsp" %>

                 <div id="contact" class="contact">             
    <div class="container">

     <c:if test="${not empty error}">
        <p><font color="red">${error}</font>    </p>
    </c:if>
         <c:url var="save" value="/user/save"/>
          <form:form modelAttribute="register" action="${save}" class="form-horizontal">
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

    <legend>Dados Pessoais</legend>      


                  <div class="col-md-4">
                    <label class="control-label"  for="firstName">Nome completo</label>
                    </div>
                    <div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text" required= "true" style= "border: 2px solid #DDDDDD" class="input-xxlarge" path="user.fullname" />

                      </div>
                      </div>
                 <br/>

                  <div class="col-xs-8 col-md-4"style="float:left">
                    <label class="control-label" for="sexo">Sexo &nbsp;</label>
                    </div>
<div class="col-md-8">
                    <div class="col-xs-8 col-md-4"style="float:left">
                      <form:select path="user.sexo" required="true" class="form-control" >

                        <form:option value="FEMININO" label="FEMININO" />
                        <form:option value ="MASCULINO" label = "MASCULINO" />>  
      </form:select>
</div>
                  </div>



                  <div class="col-md-4" style="float:left">
                    <label class="control-label"  for="dateOfBirth">Data de Nascimento</label>
                    </div>
<div class="col-md-8">
                    <div class="col-md-4" style="float:left">
                      <form:input type="date" style="border: 2px solid #DDDDDD " required="true" path="user.nascimento" placeholder="dd/mm/aaaa"/>
                  </div>
                  </div>

              <legend>Dados de acesso</legend>



                  <div class="col-md-4">
                    <label class="control-label"  for="Email">Email</label>
                    </div>
                    <div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text" style="border: 2px solid #DDDDDD" required="true" class="input-xxlarge" path="user.email" />

                  </div>
                  </div>





                  <div class="col-md-4">
                    <label class="control-label"  for="senha">Senha</label>
                    </div>

                    <div class="col-md-8">
                    <div class="col-md-6">
                      <form:input type="password" style="border: 2px solid #DDDDDD" class="input-xlarge" path="user.password" />

                  </div>
                  </div>


                  <div class="col-md-4">
                    <label class="control-label"  for="confirmaSenha">Confirma Senha</label>
                    </div>

                    <div class="col-md-8">
                    <div class="col-md-6">
                      <form:input type="password" required="true" style="border: 2px solid #DDDDDD" class="input-xlarge" path="user.passwordRepeated" />
                    </div>
                  </div>




              <legend>Dados Complementares</legend>



                  <div class="col-md-4">
                    <label class="control-label" for="postCode">CEP</label>
                    </div>

                    <div class="col-md-8">
                    <div class="col-md-6">
                      <form:input type="text" style="border: 2px solid #DDDDDD" path="endereco.cep"/> 
                  </div>
                 </div>


                  <div class="col-md-4">
                    <label class="control-label" for="postCode">Telefone</label>
                    </div>

                    <div class="col-md-8">
                    <div class="col-md-6">
                      <form:input type="text"  style="border: 2px solid #DDDDDD" path="telefone.telefone"/> 
                  </div>
                 </div>


                  <div class="col-md-4">
                    <label class="control-label" for="Endereco">Endereço</label>
                    </div>
<div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text" style="border: 2px solid #DDDDDD" class= "input-xxlarge" path="endereco.logradouro"/> 
                  </div>
                 </div>



                  <div class="col-md-4">
                    <label class="control-label" for="postCode">Número</label>
                    </div>
                    <div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text"  style="border: 2px solid #DDDDDD" path="endereco.numero"/> 
                  </div>
                 </div>


                  <div class="col-md-4">
                    <label class="control-label" for="postCode">Complemento</label>
                    </div>
<div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text" style="border: 2px solid #DDDDDD" path="endereco.complemento"/> 

                 </div>
                </div>


                  <div class="col-md-4">
                    <label class="control-label" for="postCode">Bairro</label>
                    </div>
<div class="col-md-8">
                    <div class="col-md-12">
                      <form:input type="text" style="border: 2px solid #DDDDDD" path="endereco.bairro"/> 
                  </div>
                 </div>


                  <div class="col-md-4">
                    <label class="control-label" for="postCode">Cidade</label>
                    </div>
<div class="col-md-8">
                    <div class="col-md-12">
                                          <form:input type="text" style="border: 2px solid #DDDDDD" path="endereco.cidade"/> 

                    </div>
                 </div>
                 <form:hidden path="perfil" value="USER"/>
                  <input type="submit" value="Cadastrar">  

          </form:form>
            </div>  
            </div>          

<%@include file="../footer.jsp" %></body>
    </body>
    </html>

谢谢。

1 个答案:

答案 0 :(得分:0)

@ModelAttribute作为方法参数意味着“从某处读取属性”,但无处可读,因此它为空。

将处理程序方法更改为:

@RequestMapping("/add")
public String userPage(Model model) {

    model.addAttribute("register", new RegisterForm());

    LOGGER.debug("Accessed userAdd page!");

    return "index/cadastro";
}