很明显,SimpleFormController是处理表单提交比较好的一种控制器。下面就一个小例子对SimpleFormController的用法做一个总结。
首先提纲挈领,我们的例子是做一个新闻提交模块。
如下图所示:
在输入http://localhost:8080/javalearn1.0/addNews.html后,即打开此页面,从数据库中读出新闻类别并在select框中显示。而用户填完新闻标题和新闻内容后,即保存至数据库,并刷新页面,在提交新闻按钮下方显示:保存数据成功。
第一步的显示对应一个ShowNewsClassController,而第二步保存对应AddNewsController。
首先是javalearn-servlet.xml的配置:
- <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/addNews.html">showNewsClassController</prop>
- <prop key="/addNews1.html">addNewsController</prop>
- </props>
- </property>
- </bean>
对应的ShowNewsClassController为:
- package com.javalearn.control;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.AbstractController;
- import com.javalearn.service.*;
- import java.util.*;
- import com.javalearn.model.*;
- public class ShowNewsClassController extends AbstractController{
- private JavalearnService javalearnService;
- public JavalearnService getJavalearnService() {
- return javalearnService;
- }
- public void setJavalearnService(JavalearnService javalearnService) {
- this.javalearnService = javalearnService;
- }
- @Override
- protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
- HttpServletResponse arg1) throws Exception {
- // TODO Auto-generated method stub
- List<Tbclass> list=this.javalearnService.readNewsClass();
- Map<String,List<Tbclass>> map=new HashMap<String,List<Tbclass>>();
- map.put("myclass",list);
- return new ModelAndView("addNews","map",map);
- }
- }
这个类就是在页面加载时,读取新闻类别并进行显示。
对应的addNews.jsp页面为:
- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
- <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>欢迎访问Javalearn JAVA学习网</title>
- </head>
- <body>
- <form action="addNews1.html" method="post">
- <p>新闻类别:
- <select name="myclass">
- <c:forEach items="${map.myclass}" var="Parameter">
- <option value="${Parameter.id}">${Parameter.classname }</option>
- </c:forEach>
- </select></p>
- <p>新闻标题:<input name="title" type="text"/></p>
- <p>新闻内容:<textarea name="mycontent" rows="10" cols="100"></textarea></p>
- <p><input type="submit" value="提交新闻"/></p>
- </form>
- <font color="red">${map.message}</font>
- </body>
- </html>
即,点击了提交按钮后,跳转至addNews1.html。而由在javalearn-servlet.xml中配置可知,此url交由AddNewsController进行处理。AddNewsController继承至SimpleFormController,onSubmit方法处理提交事件。且form中的各个控件的name对应AddNewsController的CommandClass的属性。类似于Struts2或JavaBean的用法。
- package com.javalearn.control;
- import org.springframework.validation.BindException;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- import com.javalearn.model.Tbclass;
- import com.javalearn.model.Tbnews;
- import com.javalearn.service.*;
- import java.util.*;
- /*
- * author:Tammy Pi
- * function:添加新闻的Controller
- */
- public class AddNewsController extends SimpleFormController{
- private JavalearnService javalearnService;
- public AddNewsController()
- {
- this.setCommandClass(Tbnews.class);
- this.setCommandName("Tbnews");
- }
- public JavalearnService getJavalearnService() {
- return javalearnService;
- }
- public void setJavalearnService(JavalearnService javalearnService) {
- this.javalearnService = javalearnService;
- }
- protected ModelAndView onSubmit(Object command,BindException bindException) throws Exception
- {
- Tbnews tbnews=(Tbnews) command;
- Map map=new HashMap<String,String>();
- List<Tbclass> list=this.javalearnService.readNewsClass();
- if(this.javalearnService.saveNews(tbnews))
- {
- map.put("message","保存数据成功!");
- }
- else
- {
- map.put("message","保存数据失败!");
- }
- map.put("myclass",list);
- return new ModelAndView(this.getSuccessView(),"map",map);
- }
- }