关于Neither BindingResult nor plain target object


javax.servlet.ServletException:Neither BindingResult nor plain target object for bean name 'loginForm'available as request attribute



从异常信息中是“loginForm”的绑定出了问题,一开始怀疑是login.jsp绑定错误或者是配
置文件中控制器的commandName属性出错,但无论怎么修改仍然不能避免这个异常的抛出,在
网上查,这个异常出现也不少,就是解决的方法比较表示的不够明了(现在回过头来觉得就
像网上说的那么回事,可能当时是自己比较浮躁了),找了个可以成功运行的实例来做对
比。最后发现是有下面这么个原因可以导致这个异常

表单页面通过非表单控制器转发(我个人出错的主要原因)

对这个异常抛出的实验


web.xml如下
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
	<servlet>
		<servlet-name>testapp</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>testapp</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<taglib>
		<taglib-uri>/spring</taglib-uri>
		<taglib-location>/WEB-INF/spring.tld</taglib-location>
	</taglib>
	
</web-app>


testapp-servlet.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
		"http://www.springframework.org/dtd/spring-beans.dtd">
		
<beans>
	<bean id="loginController" class="cot.LoginController">
		<property name="successView" value="success"/>
		<property name="formView" value="login"/>
		<property name="commandName" value="loginForm"/>
	</bean>
	<bean id="redirectController" class="cot.RedirectController">
		<property name="successView" value="login"/>
	</bean>
	
	<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/login.do">loginController</prop>
				<prop key="/redirect.do">redirectController</prop>
			</props>
		</property>
	</bean>
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass">
			<value>org.springframework.web.servlet.view.JstlView</value>
		</property>
		<property name="prefix">
			<value>/WEB-INF/jsp/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
</beans>


index.jsp如下
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

<%@ taglib prefix="spring" uri="/spring"%>

<a href="login.do">login</a>
<a href="redirect.do">redirect</a>


login.jsp如下
<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
	<form method="post" action="login.do">
			<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
				<tr>
					<td alignment="right" width="20%">Serial:</td>
						<spring:bind path="loginForm.serial">
							<td width="20%"><input type="text" name="serial" value="<c:out value="${status.value}"/>"></td>
							<td width="60%">
								<font color="red"><c:out value="${status.errorMessage}"/></font></td>
						</spring:bind>
				</tr>
			</table>
			<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
				<tr>
					<td alignment="right" width="20%">Key:</td>
						<spring:bind path="loginForm.key">
							<td width="20%"><input type="text" name="key" value="<c:out value="${status.value}"/>"></td>
							<td width="60%">
								<font color="red"><c:out value="${status.errorMessage}"/></font></td>
						</spring:bind>
				</tr>
			</table>
			<br>
			<spring:hasBindErrors name="loginForm.*">
				<b>Please fix all errors!</b>
			</spring:hasBindErrors>   
			<br><br>
			<input type="submit" alignment="center" value="Execute">
		</form>
</body>
</html>


RedirectController.java
package cot;

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RedirectController implements Controller{
	private String successView;
	
	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response)
											throws ServletException,IOException{
		return new ModelAndView(getSuccessView());
	}
	
	public String getSuccessView(){
		return successView;
	}
	public void setSuccessView(String successView){
		this.successView=successView;
	}
}


LoginController.java如下
package cot;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bus.IUserDAO;
import web.User;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class LoginController extends SimpleFormController{
	
	
	public LoginController(){
		setCommandClass(LoginForm.class);
	}
        protected ModelAndView onSubmit(HttpServletRequest  request,HttpServletResponse response,
			Object command,BindException exception) throws Exception{
		return new ModelAndView(getSuccessView());
	}
}


LoginForm.java如下
package cot;

public class LoginForm{
	
	private String serial;
	private String key;
	
	public String getSerial(){
		return serial;
	}
	public void setSerial(String serial){
		this.serial=serial;
	}
	
	public String getKey(){
		return key;
	}
	public void set(String key){
		this.key=key;
	}
}


不可避免,文中出错...

你可能感兴趣的:(java,spring,Web,jsp,servlet)