2017-08-01 23 views
0

理論上,在單擊submit之後,應該調用登錄方法並檢查用戶的用戶名和密碼以進行匹配並重定向它們到另一個.jsp頁面,但是當我嘗試加載.jsp頁面時,出現以下錯誤。java.lang.IllegalStateException:BindingResult和bean名稱'login'的普通目標對象都不作爲請求屬性

我敢肯定,這個錯誤與我的.jsp文件有關,但我不確定會出現什麼問題。

Jul 31, 2017 8:03:46 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jsp] in context with path [/Atomicity] threw exception [An exception occurred processing JSP page [/login.jsp] at line [20] 

17:     class="register-form"> 
18:     <table> 
19:      <tr> 
20:       <td><form:input path="username" /></td> 
21:       <td><form:errors path="username" /></td> 
22:      </tr> 
23:      <tr> 


Stacktrace:] with root cause 
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute 
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:141) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:132) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:116) 
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422) 
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142) 
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84) 
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80) 
at org.apache.jsp.login_jsp._jspx_meth_form_005finput_005f0(login_jsp.java:298) 
at org.apache.jsp.login_jsp._jspService(login_jsp.java:165) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:625) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498) 
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1372) 
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

[Login.jsp頁面]

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<link rel="shortcut icon" href="favicon1.ico" /> 
<title>Login page</title> 
<link rel="stylesheet" href="css/normalize.css" /> 
<link rel="stylesheet" href="css/mystyle.css" /> 
</head> 
<body> 
<img id="logoImg2" src="img/atomicitylogo.png" alt="atomicity logo"> 
<div class="login-page"> 
    <div class="form"> 
     <form:form action="login" method="POST" commandName="login" 
      class="register-form"> 
      <table> 
       <tr> 
        <td><form:input path="username" /></td> 
        <td><form:errors path="username" /></td> 
       </tr> 
       <tr> 
        <td><form:input path="password" /></td> 
        <td><form:errors path="password" /></td> 
       </tr> 
       <tr> 
        <td colspan="2"><input type="submit" value="Log In" /> 
         <p class="message"> 
       </tr> 
      </table> 
      <p> 
       Not registered? <a href="register.html">Create an account</a> 
      </p> 
     </form:form> 
     </div> 
    </div> 
</body> 
</html> 

[LoginComponent.java]

package com.atomicity.components; 

import javax.validation.constraints.NotNull; 

import org.springframework.stereotype.Component; 

@Component(value = "login") 
public class LoginComponent { 

@NotNull 
private String username; 
@NotNull 
private String password; 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 
} 

[LoginController.java]

package com.atomicity.controllers; 

import javax.validation.Valid; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import com.atomicity.components.LoginComponent; 
import com.atomicity.dao.UsersDAO; 
import com.atomicity.domain.Users; 

@Controller 
public class LoginController { 

@RequestMapping(value = "/loggingIn", method = RequestMethod.POST) 
public String login(@Valid @ModelAttribute("login") LoginComponent login, BindingResult br, Model m) { 
    ApplicationContext appCon = new ClassPathXmlApplicationContext("beans.xml"); 
    UsersDAO uDAO = (UsersDAO) appCon.getBean("usersDAO"); 
    Users user = uDAO.getUserByName(login.getUsername()); 

    if (user != null) { 
     // Check if password is correct 
     if (user.getPassword().equals(login.getPassword())) { 
      m.addAttribute("firstname", user.getFirstName()); 
      m.addAttribute("lastname", user.getLastName()); 
      m.addAttribute("email", user.getEmail()); 
      m.addAttribute("username", login.getUsername()); 
      ((AbstractApplicationContext) appCon).close(); 
      return "account"; 
     } else { 
      // Wrong Password 
     } 
    } else { 
     // User/Password does not exists 
    } 
    ((AbstractApplicationContext) appCon).close(); 
    return null; 
} 
} 

任何幫助是值得歡迎的。

[編輯]刪除login.jsp中的表格允許顯示頁面,所以我認爲問題可能存在(或不)。

+0

假設你參考這個[示例](https://examples.javacodegeeks.com/enterprise-java/spring/mvc/spring-mvc-login-example /)在spring mvc登錄表單上獲取有關您錯過的內容的想法。 –

回答

1
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'login' available as request attribute 

看着堆棧跟蹤它表明你沒有通過登錄對象的視圖。因此,JSP不能正確渲染..

@GetMapping("/login") 
public String login(Model m) { 

    //Use model to expose the LoginComponent object 
    m.addAttribute("login", new LoginComponent()); 
    return "login"; 
} 

你可以找到更詳細的演練在這裏:https://spring.io/guides/gs/handling-form-submission/

+0

在頁面加載之前出現異常。我沒有看到該頁面,我只是得到了異常。 另外,我在控制器中沒有GET請求方法。 –

+0

基督徒,請嘗試添加獲取請求方法。讓我知道如果這樣的作品 –

+0

我似乎有同樣的問題 –

相關問題