以注册过程为例,我们可能会选择继承AbstractController来实现表单的显示,继承AbstractCommandController来实现表单的处理 ,这样是可行的,但必须要维护两个控制器
在这种情况下,我们应该使用SimpleFormController,他接受GEt请求时显示表单,接受POST请求时处理表单,如果发生错误,控制器会知道重新显示这个表单,这样用户就可以修改错误,重新提交
表单对应的POJO
package model;public class Student ...{private String name;private String sex;public String getName() ...{return name;}public void setName(String name) ...{this.name = name;}public String getSex() ...{return sex;}public void setSex(String sex) ...{this.sex = sex;}}
控制器:
这个base类中还有一个DoSubmitAction()方法,和onSubmit()方法的区别就是后者可以返回一个ModelAndView对象,完成向页面输出数据的功能,而前者不能向页面返回数据,这两个方法同时只有一个有效
package Action;
import model.Student;import org.springframework.validation.BindException;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.SimpleFormController;public class RegisterStudentController extends SimpleFormController ...{public RegisterStudentController()...{this.setCommandClass(Student.class);}protected ModelAndView onSubmit(Object object, BindException arg1) throws Exception ...{Student stu=(Student)object;return new ModelAndView(getSuccessView(),"student",stu);}}
web.xml
xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">contextConfigLocation/WEB-INF/train-service.xml,/WEB-INF/train-data.xml,/WEB-INF/train-servlet.xmltrainorg.springframework.web.servlet.DispatcherServlet0train*.mvccharacterAction.CharacterFiltercharacter/*index.jsp
train-servlet.xml
formView定义为register对应我们的表单提交页面register.jsp
successView定义为success对应提交成功的显示页面success.jsp
registersuccessHomeControllerRegisterStudentController
register.jsp: <%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%...String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
success.jsp <%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%...String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
success.jsp <%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%...String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
测试运行,可以看到success.jsp上有我们提交的信息
去—–1 (使用filter处理中文问题)
其实你已经错过了旅行的意义。