`

SimpleFormController机理初探

阅读更多
org.springframework.web.servlet.mvc.SimpleFormController 是 AbstractFormController 的子类别,对于简单的表单可以直接继承这个类别,并重新定义其 onSubmit()或 doSubmitAction()方法以处理使用者的请求,SimpleFormController 的处理流程是这样的: </p>
<p> 1. 呼叫 processFormSubmission()以检验 Errors 物件,看看在绑定或验证时有无任何的 错误。 <br />
  2. 如果有错误发生,返回"formView"所设定的页面。 <br />
  3. 如果 isFormChangeRequest()根据 request 被重新定义并返回 true,则也会回到 "formView",在回到"formView"之前会呼叫 onFormChange() ,让您有机会修正表单物
  件。 <br />
  4. 如果没有错误发生,则会呼叫带有  HttpServletRequest、HttpServletResponse、Object、 BindException 参数的 onSubmit(),预设是呼叫仅带 Object 及 BindException 的
  onSubmit(),而后者预设是呼叫只有 Object 参数的 onSubmit(),预设是导向设定的  "successView",可以考虑重新定义 doSubmitAction(),不用返回 ModelAndView,预设 会导向  "successView",在不需要向"successView"传送任何 Model 资料物件时可以使
  用。 <br />
  以下实作一个表单登入程式,以示范 SimpleFormController 的作用,首先设计一个  form.jsp: </p>
<h5> •      form.jsp</h5>
<pre class="code"><%@pagecontentType="text/html"%>
<%@page?pageEncoding="UTF-8"%>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Login Form</title>
</head>
<body>
<h1>登入表单</h1> 请输入使用者名称与密码:<p>
  <form name="loginform" action="/SimpleFormDemo/login.do" method="POST">
   名称 <input type="text" name="username"/><br>
   密码 <input type="password" name="password"/><br>
   <input type="submit" value="确定"/>
  </form> 注意:输入错误会再回到这个页面中。
</body>
</html></pre>
<p> 表单中传递两个参数"username"与"password",注意表单的"method"属性设定为"POST",这样 Spring 才会将请求参数填入表单物件中。先看看 LoginController 的撰写: </p>
<h5> •      LoginController.java  </h5>
<pre class="code">package onlyfun.caterpillar;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.*;
public class LoginController extends SimpleFormController {
public LoginController() {
  setCommandClass(LoginForm.class);
}
protected ModelAndView onSubmit(
Object command) throws Exception {
  LoginForm form = (LoginForm) command;
  if("caterpillar".equals(form.getUsername()) && "123456".equals(form.getPassword())) {
   return new ModelAndView(getSuccessView(),"user", form.getUsername());
  }
  else {
   return new ModelAndView(getFormView());
  }
}
}
</pre>
<p> nSumit()方法接收 command 物件,这个物件代表了表单物件,getSuccessView()与 getFormView()
  是 SimpleFormController 中定义的两个方法,分别表示通过验证与失败的目标网页,待会可以  直接在 Bean 定义档中定义,先来看看表单物  件,它只是个简单的 JavaBean: </p>
<h5> •      LoginForm.java</h5>
<pre class="code">package onlyfun.caterpillar;
public class LoginForm {
private String username;
private String password;
public void setUsername(String username) {
  this.username = username;
}
public void setPassword(String password) {
  this.password = password;
}
public String getUsername() {
  return username;
}
public String getPassword() {
  return password;
}
}</pre>
<p> 接下来看看 Bean 定义档是如何撰写的:</p>
<h5> •      mvc-config.xml</h5>
<pre class="code"><?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="urlMapping" class="org.springframework.web.servlet.
  → handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="/login.do">loginController</prop>
   </props>
  </property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.
  → view.InternalResourceViewResolver">
  <property name="prefix">
   <value>/WEB-INF/jsp/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
</bean>
<bean id="loginController" class="onlyfun.caterpillar.LoginController">
  <property name="successView">
   <value>success</value>
  </property>
  <property name="formView">
   <value>form</value>
  </property>
</bean>
</beans></pre>
<p> 定义档中定义了"successView"与"formView",其中 form.jsp 之前已经撰写完成,来看一下
success.jsp 的撰写:</p>
<h5> •      success.jsp</h5>
<pre class="code"><%@pagecontentType="text/html"%>
<%@page?pageEncoding="UTF-8"%>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>登入成功</title>
</head>
<body>
  <H1>哈啰! ${user}!!</H2> 这是您的神秘礼物!^o^
</body>
</html></pre>
<p>直接请求 login.do 的话,由于未通过登入检查,所以会返回表单登入画面,登入成功的话,会  进入 success.jsp 并显示使用者的名称,登入失败的话,依"formView"的设定,会回到原来的登 入表单。
分享到:
评论

相关推荐

    springMVC3学习(六)--SimpleFormController(源码)

    springMVC3学习(六)--SimpleFormController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988733

    一个最简单的SimpleFormController使用

    NULL 博文链接:https://mgz-99-163-com.iteye.com/blog/690417

    Spring MVC控制器之SimpleFormController使用

    NULL 博文链接:https://huihai.iteye.com/blog/1967697

    Spring MVC 例子

    Spring MVC例子 有SimpleFormController ,MultiationController等控制器的应用介绍.算是比较完整的例子大家看看吧。

    Web框架-spring

    Spring的web框架是围绕...你可以通过实现这个接口来生成自己的控制器(也可以称之为处理器),但是从Spring提供的一系列控制器继承会更省事,比如AbstractController、AbstractCommandController和SimpleFormController

    spring 2.0表单绑定实例

    自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定

    legacy-app:使用 Spring 演讲改进您的遗留应用程序的代码

    3.2 版本是包含SimpleFormController的最后一个版本,这将允许更轻松的迁移路径。 现在可以选择使用SimpleFormController虽然已弃用),或者切换到@Controller 。 JDK从1.4更新到1.6,代码保持不变。为...

    Spring MVC与JAX-RS比较与分析

    去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念...更进一步,如果你手头有一个Spring MVC应用,使用了控制类继承(SimpleFormController等),你可能还意识不到现在的Spring MVC对REST广泛的支持。

    Spring-Validator-开源

    Spring-Validator软件包提供了一种自动生成JavaScript客户端验证代码的简单方法,并提供了SimpleFormController的通用验证器

    开源框架 Spring Gossip

    从代理机制初探 AOP 动态代理 &lt;br&gt;AOP 观念与术语 Spring AOP Advices Advices 包括了Aspect 的真正逻辑,由于缝合至Targets的时机不同,Spring 提供了几种不同的 Advices。 Before ...

    CryptoPresto:基于Spring MVC的Web平台,用于加密交易和转移

    加密货币 一个基于Spring MVC的网络平台,用于加密货币交易和转移 框架:Spring mvc 5.2.3.RELEASE。... 用户表单提交:SimpleFormController。 IDE:面向Java开发人员的Eclipse Enterprise 2020-09(4.17.0)。

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 ...

Global site tag (gtag.js) - Google Analytics