2012-08-25 20 views
3

在我的基本spring mvc應用程序中,我收到異常。我正在使用SimpleFormController。我的代碼如下。SimpleFormController - java.lang.IllegalStateException:BindingResult和bean名稱'命令'的普通目標對象都不是

在我的調度員的servlet

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <props> 
      <prop key="index.htm">indexController</prop> 
      <!-- <prop key="login.htm">loginController</prop> --> 
     </props> 
    </property> 
</bean> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" 
     p:suffix=".jsp" /> 

<!-- 
The index controller. 
--> 
<bean name="indexController" 
     class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
     p:viewName="index" /> 
<!-- <bean name="loginController" 
     class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
     p:viewName="login"/> --> 

<bean name="/login.htm" class="com.pack.controller.LoginController" > 
<property name="commandClass" value="com.pack.model.User" /> 
<property name="formView" value="login"/> 
<property name="successView" value="index.htm"/> 
</bean> 

在我的JSP頁面

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Login</title> 
    </head> 
    <body> 
     <h1>Login</h1> 
     <form:form name="loginForm" method="post"> 
     ${msg} 
     <form:input id="username" path="username"/> 
     <form:password id="password" path="password"/> 
     <input type="submit" value="login" name="login" /> 
     </form:form> 
    </body> 
</html> 

在我的控制器類

public class LoginController extends SimpleFormController{ 

    @Override 
    public ModelAndView onSubmit(Object command) throws ServletException { 
     User user = (User)command; 
     System.out.println("Username:" + user.getUsername() + " Password:" + user.getPassword()); 
     if(user.getUsername().equalsIgnoreCase("sa") && user.getPassword().equalsIgnoreCase("12")){ 
      return new ModelAndView(new RedirectView(getSuccessView())); 
     } 
     else 
     { 
      ModelAndView modelAndView = new ModelAndView("login"); 
      modelAndView.addObject("msg", "Invalid login"); 
      return modelAndView; 
     } 
    }  
} 

一旦用戶輸入正確的用戶名和密碼會重定向到index頁面。這工作正常。但是用戶輸入錯誤的登錄憑據會引發此錯誤。

例外
org.springframework.web.util.NestedServletException:請求處理失敗;嵌套異常是java.lang.IllegalStateException:既沒有BindingResult也沒有用於bean名稱的普通目標對象'command'作爲請求屬性
根本原因
java.lang.IllegalStateException:既沒有BindingResult也沒有用於Bean名稱「命令」的普通目標對象作爲請求屬性

任何建議來解決這個問題?

回答

1

我得到了一個解決這個問題,如果我們使用HTML控件,而不是春天的控制,這個問題將解決。這裏在JSP文件中,

<%-- <form:input id="username" path="username"/> 
     <form:password id="password" path="password"/> --%> 
     <input type="text" name="username"/> 
     <input type="password" name="password"/> 

這會解決問題。謝謝所有回覆。

1

也許不是您的問題的真正答案,但如果可能的話,您應該使用(更新的)基於註釋的控制器。您正在使用SimpleFormController,該版本在當前的春季版本中已棄用。

檢查thisthis替代。

+0

感謝answer.But我尋找解決這一特定問題。 – Sajith

4

您可以參考春季表單標籤文檔瀏覽:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/spring-form.tld.html#spring-form.tld.form

罪魁禍首是你沒有設置「的ModelAttribute」屬性,它被默認爲「命令」;因此,你的錯誤信息。您應該將'modelAttribute'設置爲表示用戶的模型中的屬性名稱。

此外,我同意micha,你應該使用新的基於註釋的控制器。

下面你會找到一個如何正確使用modelAttribute的例子。請注意,當您將請求路由到用戶/新的時候,控制器會將一個空用戶(新用戶())置於'用戶'鍵下的模型中。然後,JSP將'user'指定爲modelAttribute(我確信這是區分大小寫的)。

@Controller 
@RequestMapping(value = "/users") 
public class UserController { 

    @RequestMapping(value = "/new", method = RequestMethod.GET) 
    public String newForm(Model model) { 
     model.addAttribute("user", new User()); 

     return "users/new"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String create(User user) { 
     this.userRepository.save(user); 

     return "redirect:/users/" + user.getId(); 
    } 

} 

內部 「用戶/ new.jsp」:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %> 
<html> 

<body> 
<c:url value="/users" var="users"/> 

<sf:form action="${users}" method="POST" modelAttribute="user"> 
    <table> 
     <tr> 
      <th><label for="full_name">Full Name:</label></th> 
      <td><sf:input path="name" size="15" id="full_name" /></td> 
     </tr> 
    </table> 
    <input type="submit" value="Create User" /> 
</sf:form> 

+0

感謝您的回答。讓我檢查一下。 – Sajith

+0

這不是working.I已經改變的代碼作爲像這樣的JSP文件<形式:表格名稱=「登錄表單」方法=「POST」的ModelAttribute =「用戶」>。但得到一個異常「java.lang.IllegalStateException:都不BindingResult或bean名稱爲'User'的普通目標對象可用作請求屬性「 – Sajith

0

這不是一個有效的解決方案,而不是一個變通辦法,如綁定到您的命令對象將不可用。

在類似的錯誤情況,我發現在我的* -servlet.xml後綴的命令名是differrent。當我將它與實際的commandBean相同時,錯誤消失了。

相關問題