很明显,SimpleFormController是处理表单提交比较好的一种控制器。下面就一个小例子对SimpleFormController的用法做一个总结。
首先提纲挈领,我们的例子是做一个新闻提交模块。
如下图所示:
在输入http://localhost:8080/javalearn1.0/addNews.html后,即打开此页面,从数据库中读出新闻类别并在select框中显示。而用户填完新闻标题和新闻内容后,即保存至数据库,并刷新页面,在提交新闻按钮下方显示:保存数据成功。
第一步的显示对应一个ShowNewsClassController,而第二步保存对应AddNewsController。
首先是javalearn-servlet.xml的配置:
- <beanid="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <propertyname="mappings">
- <props>
- <propkey="/addNews.html">showNewsClassController</prop>
- <propkey="/addNews1.html">addNewsController</prop>
- </props>
- </property>
- </bean>
对应的ShowNewsClassController为:
- packagecom.javalearn.control;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importorg.springframework.web.servlet.ModelAndView;
- importorg.springframework.web.servlet.mvc.AbstractController;
- importcom.javalearn.service.*;
- importjava.util.*;
- importcom.javalearn.model.*;
- publicclassShowNewsClassControllerextendsAbstractController{
- privateJavalearnServicejavalearnService;
- publicJavalearnServicegetJavalearnService(){
- returnjavalearnService;
- }
- publicvoidsetJavalearnService(JavalearnServicejavalearnService){
- this.javalearnService=javalearnService;
- }
- @Override
- protectedModelAndViewhandleRequestInternal(HttpServletRequestarg0,
- HttpServletResponsearg1)throwsException{
- //TODOAuto-generatedmethodstub
- List<Tbclass>list=this.javalearnService.readNewsClass();
- Map<String,List<Tbclass>>map=newHashMap<String,List<Tbclass>>();
- map.put("myclass",list);
- returnnewModelAndView("addNews","map",map);
- }
- }
这个类就是在页面加载时,读取新闻类别并进行显示。
对应的addNews.jsp页面为:
- <%@pagecontentType="text/html;charset=gb2312"language="java"import="java.sql.*"errorPage=""%>
- <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
- <title>欢迎访问JavalearnJAVA学习网</title>
- </head>
- <body>
- <formaction="addNews1.html"method="post">
- <p>新闻类别:
- <selectname="myclass">
- <c:forEachitems="${map.myclass}"var="Parameter">
- <optionvalue="${Parameter.id}">${Parameter.classname}</option>
- </c:forEach>
- </select></p>
- <p>新闻标题:<inputname="title"type="text"/></p>
- <p>新闻内容:<textareaname="mycontent"rows="10"cols="100"></textarea></p>
- <p><inputtype="submit"value="提交新闻"/></p>
- </form>
- <fontcolor="red">${map.message}</font>
- </body>
- </html>
即,点击了提交按钮后,跳转至addNews1.html。而由在javalearn-servlet.xml中配置可知,此url交由AddNewsController进行处理。AddNewsController继承至SimpleFormController,onSubmit方法处理提交事件。且form中的各个控件的name对应AddNewsController的CommandClass的属性。类似于Struts2或JavaBean的用法。
- packagecom.javalearn.control;
- importorg.springframework.validation.BindException;
- importorg.springframework.web.servlet.ModelAndView;
- importorg.springframework.web.servlet.mvc.SimpleFormController;
- importcom.javalearn.model.Tbclass;
- importcom.javalearn.model.Tbnews;
- importcom.javalearn.service.*;
- importjava.util.*;
- /*
- *author:TammyPi
- *function:添加新闻的Controller
- */
- publicclassAddNewsControllerextendsSimpleFormController{
- privateJavalearnServicejavalearnService;
- publicAddNewsController()
- {
- this.setCommandClass(Tbnews.class);
- this.setCommandName("Tbnews");
- }
- publicJavalearnServicegetJavalearnService(){
- returnjavalearnService;
- }
- publicvoidsetJavalearnService(JavalearnServicejavalearnService){
- this.javalearnService=javalearnService;
- }
- protectedModelAndViewonSubmit(Objectcommand,BindExceptionbindException)throwsException
- {
- Tbnewstbnews=(Tbnews)command;
- Mapmap=newHashMap<String,String>();
- List<Tbclass>list=this.javalearnService.readNewsClass();
- if(this.javalearnService.saveNews(tbnews))
- {
- map.put("message","保存数据成功!");
- }
- else
- {
- map.put("message","保存数据失败!");
- }
- map.put("myclass",list);
- returnnewModelAndView(this.getSuccessView(),"map",map);
- }
- }