2014-01-16 76 views
0

我試圖使用annotation.But當我運行的應用程序使用Spring的驗證,它提供了以下exception-java.lang.IllegalStateException:無論BindingResult也不是爲bean名稱「logpo」可以作爲請求屬性平原目標對象

org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jsp] in context with path [/SpringTest] threw 
exception [java.lang.IllegalStateException: Neither BindingResult nor plain target  
object for bean name 'logpo' available as request attribute] with root cause 
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean  
name 'logpo' available as request attribute 
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:160) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:147) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:138) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:122) 
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:408) 
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140) 
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102) 
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79) 
at org.apache.jsp.index_jsp._jspx_meth_form_005finput_005f0(index_jsp.java:196) 
at org.apache.jsp.index_jsp._jspService(index_jsp.java:98) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

我已經嘗試過,但無法解決此問題。 index.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>Login Page</title> 
</head> 
<body> 
<form:form action="login.do" commandName="logpo" method="GET"> 
Enter name : 
<form:input path="uname" /> 
<form:errors path="uname" /><br> 
Enter pass : 
< form:input path="password"/> 
<form:errors path="password"/> 
<input type="submit" value="In" /> 
</form:form> 
</body> 
</html> 

Web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" 
version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > 

<display-name>SpringTest</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener- 
class> 
</listener> 

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.do</url-pattern> 
</servlet-mapping> 


<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/resources/log4j.properties</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

</web-app> 

dispacher-servel.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="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 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

<mvc:annotation-driven/> 

<!-- Dispacher --> 
<bean 
    id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver" > 
    <property 
     name="prefix" 
     value="" /> 

    <property 
     name="suffix" 
     value=".jsp" /> 
</bean> 

<bean class="org.springframework.context.support.ResourceBundleMessageSource" 
    id="messageSource"> 
    <property name="basename" value="messages" /> 
</bean> 



</beans> 

和控制器是 LoginController.java

package com.controller; 

import java.util.Iterator; 
import java.util.List; 
import javax.servlet.http.HttpServletRequest; 
import javax.validation.Valid; 

import org.apache.log4j.Logger; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

import com.util.HibernateUtil; 
import com.util.LoginPojo; 

@Controller 
public class LoginController { 
private static final Logger logger = Logger 
     .getLogger(LoginController.class); 
private LoginPojo llogin; 

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public ModelAndView loginAuth(@Valid LoginPojo logpo ,BindingResult  
    br,HttpServletRequest req,ModelAndView mav) { 
    logger.info("loginAuth method"); 
    //ModelAndView mav = new ModelAndView(); 
    if(br.hasErrors()){ 
     mav.setViewName("index"); 
    }else{ 
        mav.setViewName("success"); 
    } 

,我已經添加了所有所需的jar 。

回答

0

它看起來像直接調用index.jsp,而不需要通過Spring控制器初始化logpo bean並將其設置在模型中。

不要這樣做。始終通過一個控制器。該視圖需要使用logpo bean,該bean必須由控制器創建。

+0

什麼應該是正確的方法來做到這一點? –

+0

通過讓Spring實例化它並將它添加到模型中,就像你在loginAuth方法中做的一樣,或者通過執行'modelAndView.addObject(「logpo」,new LoginPojo())''。 –

+0

我已更改,但仍然有問題... –

相關問題