[置顶]       Spring MVC之SimpleFormController的简单使用

很明显,SimpleFormController是处理表单提交比较好的一种控制器。下面就一个小例子对SimpleFormController的用法做一个总结。

首先提纲挈领,我们的例子是做一个新闻提交模块。

如下图所示:

在输入http://localhost:8080/javalearn1.0/addNews.html后,即打开此页面,从数据库中读出新闻类别并在select框中显示。而用户填完新闻标题和新闻内容后,即保存至数据库,并刷新页面,在提交新闻按钮下方显示:保存数据成功。

第一步的显示对应一个ShowNewsClassController,而第二步保存对应AddNewsController。

首先是javalearn-servlet.xml的配置:

[html]  view plain copy
  1. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  2.     <property name="mappings">  
  3.         <props>  
  4.             <prop key="/addNews.html">showNewsClassController</prop>  
  5.         <prop key="/addNews1.html">addNewsController</prop>  
  6.         </props>  
  7.     </property>  
  8. </bean>  

对应的ShowNewsClassController为:

[java]  view plain copy
  1. package com.javalearn.control;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import javax.servlet.http.HttpServletResponse;  
  4. import org.springframework.web.servlet.ModelAndView;  
  5. import org.springframework.web.servlet.mvc.AbstractController;  
  6. import com.javalearn.service.*;  
  7. import java.util.*;  
  8. import com.javalearn.model.*;  
  9. public class ShowNewsClassController extends AbstractController{  
  10.   
  11.     private JavalearnService javalearnService;  
  12.       
  13.     public JavalearnService getJavalearnService() {  
  14.         return javalearnService;  
  15.     }  
  16.   
  17.     public void setJavalearnService(JavalearnService javalearnService) {  
  18.         this.javalearnService = javalearnService;  
  19.     }  
  20.   
  21.     @Override  
  22.     protected ModelAndView handleRequestInternal(HttpServletRequest arg0,  
  23.             HttpServletResponse arg1) throws Exception {  
  24.         // TODO Auto-generated method stub  
  25.           
  26.         List<Tbclass> list=this.javalearnService.readNewsClass();  
  27.         Map<String,List<Tbclass>> map=new HashMap<String,List<Tbclass>>();  
  28.         map.put("myclass",list);  
  29.           
  30.         return new ModelAndView("addNews","map",map);  
  31.     }     
  32. }  

这个类就是在页面加载时,读取新闻类别并进行显示。

对应的addNews.jsp页面为:

[java]  view plain copy
  1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>  
  2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  7. <title>欢迎访问Javalearn JAVA学习网</title>  
  8. </head>  
  9. <body>  
  10. <form action="addNews1.html" method="post">  
  11. <p>新闻类别:  
  12. <select name="myclass">  
  13.  <c:forEach items="${map.myclass}" var="Parameter">  
  14.    <option value="${Parameter.id}">${Parameter.classname }</option>  
  15.   </c:forEach>  
  16. </select></p>  
  17. <p>新闻标题:<input name="title" type="text"/></p>  
  18. <p>新闻内容:<textarea name="mycontent" rows="10" cols="100"></textarea></p>  
  19. <p><input type="submit"  value="提交新闻"/></p>  
  20. </form>  
  21. <font color="red">${map.message}</font>  
  22. </body>  
  23. </html>  

即,点击了提交按钮后,跳转至addNews1.html。而由在javalearn-servlet.xml中配置可知,此url交由AddNewsController进行处理。AddNewsController继承至SimpleFormController,onSubmit方法处理提交事件。且form中的各个控件的name对应AddNewsController的CommandClass的属性。类似于Struts2或JavaBean的用法。

[java]  view plain copy
  1. package com.javalearn.control;  
  2. import org.springframework.validation.BindException;  
  3. import org.springframework.web.servlet.ModelAndView;  
  4. import org.springframework.web.servlet.mvc.SimpleFormController;  
  5.   
  6. import com.javalearn.model.Tbclass;  
  7. import com.javalearn.model.Tbnews;  
  8. import com.javalearn.service.*;  
  9. import java.util.*;  
  10. /* 
  11.  * author:Tammy Pi 
  12.  * function:添加新闻的Controller 
  13.  */  
  14. public class AddNewsController extends  SimpleFormController{  
  15.   
  16.     private JavalearnService javalearnService;  
  17.     public AddNewsController()  
  18.     {  
  19.         this.setCommandClass(Tbnews.class);  
  20.         this.setCommandName("Tbnews");  
  21.     }  
  22.     public JavalearnService getJavalearnService() {  
  23.         return javalearnService;  
  24.     }  
  25.     public void setJavalearnService(JavalearnService javalearnService) {  
  26.         this.javalearnService = javalearnService;  
  27.     }  
  28.       
  29.     protected ModelAndView onSubmit(Object command,BindException bindException) throws Exception  
  30.     {  
  31.         Tbnews tbnews=(Tbnews) command;  
  32.           
  33.         Map map=new HashMap<String,String>();  
  34.         List<Tbclass> list=this.javalearnService.readNewsClass();  
  35.         if(this.javalearnService.saveNews(tbnews))  
  36.         {  
  37.             map.put("message","保存数据成功!");  
  38.         }  
  39.         else  
  40.         {  
  41.             map.put("message","保存数据失败!");  
  42.         }  
  43.         map.put("myclass",list);  
  44.         return new ModelAndView(this.getSuccessView(),"map",map);  
  45.     }  

你可能感兴趣的:(spring,spring,mvc,mvc,mv)