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"的设定,会回到原来的登 入表单。
微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值