2013-07-16 46 views
1

我是spring3的初學者,所以我創建了一個簡單的登錄應用程序。在我的LoginController我收到「java.lang.ClassCastException:org.springframework.web.bind.support.SimpleSessionStatus不能轉換到com.forms.LoginForm」在下一行java.lang.ClassCastException:雖然在onSubmit方法中強制命令對象

LoginForm login = (LoginForm)command; 

對於參考代碼如下:

LoginController.java:-

package com.beans; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.SimpleFormController; 

import com.Dao.LoginDaoUtil; 
import com.forms.LoginForm; 

@SuppressWarnings("deprecation") 
@Controller 
public class LoginController extends SimpleFormController { 

    public LoginController() { 
     setCommandClass(LoginForm.class); 
    } 

    @RequestMapping("/LoginAction") 
    protected ModelAndView onSubmit(Object command) { 
     try { 
      LoginForm login = (LoginForm) command; 

      ApplicationContext ctx = new ClassPathXmlApplicationContext(
        "SpringBlogger-servlet.xml"); 
      LoginDaoUtil daoUtil = ctx.getBean("LoginDaoUtil", 
        LoginDaoUtil.class); 
      boolean isUserValid = daoUtil.isValidUser(login.getUsername(), 
        login.getPassword()); 

      if (isUserValid) 
       return new ModelAndView("success").addObject("name", 
         login.getUsername()); 
      else 
       return new ModelAndView("login", "loginForm", new LoginForm()); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return new ModelAndView("login", "loginForm", new LoginForm()); 

     } 

    } 
} 

的login.jsp: -

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<h1>${message}</h1> 
<form:form action="LoginAction" method="post" commandName="loginForm"> 
Username:<form:input path="username"/> 
<font color="red"><form:errors path="username"/></font><br/><br/> 
Password:<form:password path="password"/> 
<font color="red"><form:errors path="password"/></font><br/><br/> 
<input type="submit" value="submit"> 
</form:form> 
</body> 
</html> 

LoginForm.java:-

package com.forms; 

public class LoginForm { 

    private String username; 
    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; 
    } 

} 

HomeController.java:-

package com.beans; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 

import com.forms.LoginForm; 

@Controller 
public class HomeController { 

    @RequestMapping({"/","/home"}) 
    public String showHomePage(ModelMap map){ 
     map.addAttribute("message", "Welcome to Spring Blogger"); 
     map.addAttribute("loginForm", new LoginForm()); 
     return "login"; 
    } 
} 

web.xml中: -

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
<display-name>SpringBlogger</display-name> 
<welcome-file-list> 
<welcome-file>login.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
<servlet-name>SpringBlogger</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>SpringBlogger</servlet-name> 
<url-pattern>/</url-pattern> 
</servlet-mapping> 
</web-app> 

SpringBlogger-servlet.xml中: -

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


<mvc:annotation-driven/> 
<context:component-scan base-package="com.beans" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
<property name="url" value="jdbc:mysql://localhost/springblogger"></property> 
<property name="username" value="root"></property> 
<property name="password" value="root"></property> 
</bean> 


</beans> 

請幫忙。

感謝, 馬尼什

回答

1

不能使用對象類型綁定您的形式,使用它的類型,而不是與@ModelAttribute1

@RequestMapping("/LoginAction") 
    public ModelAndView onSubmit(@ModelAttribute("loginForm") LoginForm command) { 

而且我看見你正試圖中創建一個新的應用程序上下文decoreated控制器似乎不必要的,使用依賴注入/自動裝配,而不是你的控制器類

+0

感謝gerrytan.It現在工作,但在教程中我已經看到onSubmit(對象命令)的幾個地方, – Manish