`
esffor
  • 浏览: 1353491 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 复杂表单分部提交--使用AbstractWizardFormController解决方案

阅读更多

如果我们的表单有很多的输入选项,如果都放置在一个页面上,会导致页面过多,如果我们能把这些输入分散到几个页面上,按向导的方式填写,在最后一页上进行提交,势必会带来良好的可操作性,使用Spring MVC 架构中的AbstractWizardFormController控制器,可以很轻松的完成以上功能

(1)配置文件:web.xml 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns
="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
  
<context-param>
    
<param-name>contextConfigLocation</param-name>
    
<param-value>/WEB-INF/train-servlet.xml</param-value>
  
</context-param>
  
<servlet>
    
<servlet-name>train</servlet-name>
    
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
<load-on-startup>0</load-on-startup>
  
</servlet>
  
<servlet-mapping>
     
<servlet-name>train</servlet-name>
     
<url-pattern>*.mvc</url-pattern>
  
</servlet-mapping>

   
<listener>
     
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   
</listener>
    
  
<filter>
    
<filter-name>character</filter-name>
    
<filter-class>Action.CharacterFilter</filter-class>
  
</filter>
  
<filter-mapping>
    
<filter-name>character</filter-name>
    
<url-pattern>/*</url-pattern>
  
</filter-mapping>
  
<welcome-file-list>
    
<welcome-file>index.jsp</welcome-file>
  
</welcome-file-list>
</web-app>

 

(2)控制器类

   其中successView是最后表单提交成功后的回显页面,由spring注入
           cancelView是中途取消提交过程后的返回页面,由spring注入
           vote为我们表单对应的javabean
   
         继承了AbstractWizardFormController,所以必须实现他的abstract mothed---processFinish。也就是说,若果继承了AbstractWizardFormController,你仅需要实现这个方法。当所有的页面表单填写完将调用这个方法。 processCancel方法不是必须实现的,他是在你填写某一步表单时想取消,按取消按钮时调用。

package Action;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Vote;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractWizardFormController;
import org.springframework.web.util.WebUtils;

public class FeedBackWizardController extends AbstractWizardFormController ...{

    
private String successView;
    
private String cancelView;
    
public String getCancelView() ...{
        
return cancelView;
    }


    
public void setCancelView(String cancelView) ...{
        
this.cancelView = cancelView;
    }


    
public String getSuccessView() ...{
        
return successView;
    }


    
public void setSuccessView(String successView) ...{
        
this.successView = successView;
    }


    
protected ModelAndView processCancel(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, BindException arg3) throws Exception ...{

       
return new ModelAndView(this.getCancelView());
    }

 

    
protected ModelAndView processFinish(HttpServletRequest request,
            HttpServletResponse response, Object object, BindException exception)
            
throws Exception ...{
        Vote vote
=(Vote)object;
        
        
return new ModelAndView(this.getSuccessView(),"vote",vote);
    }


}

JavaBean:

package model;
public class Vote ...{
   
private String id;
   
private String name;
   
private String option;
   
private String result;
public String getId() ...{
    
return id;
}

public void setId(String id) ...{
    
this.id = id;
}

public String getName() ...{
    
return name;
}

public void setName(String name) ...{
    
this.name = name;
}

public String getOption() ...{
    
return option;
}

public void setOption(String option) ...{
    
this.option = option;
}

public String getResult() ...{
    
return result;
}

public void setResult(String result) ...{
    
this.result = result;
}
 
}

 

配置文件:

 

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 
<property name="mappings">
   
<props>
     
<prop key="/feedback.mvc">FeedbackController</prop>
 
   
</props>
 
</property>
</bean>



<!-- 使用AbstractWizardFormController控制器 -->
<bean id="FeedbackController" class="Action.FeedBackWizardController">
  
<property name="successView"><value>formWizard/thankyou</value> </property>
  
<property name="cancelView"><value>formWizard/first</value> </property> 
  
<property name="commandClass"><value>model.Vote</value></property>  <!---配置操作类->

  <property name="pages">
    <list>  <!---此处定义表单向导的页面流顺序,要严格执行这里配置的顺序->
      <value>formWizard/first</value>
      <value>formWizard/id</value>
      <value>formWizard/name</value>
      <value>formWizard/option</value>
      <value>formWizard/result</value>
    </list>
  </property>
</bean>


<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
    <value>/</value>
  </property>
  <property name="suffix">
    <value>.jsp</value>
  </property>
</bean>

我们执行feedback.mvc时候,默认首先访问第一顺位的页面first.jsp

first.jsp:

 

<%...@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding
="GB18030"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<FORM action="feedback.mvc" method="post">
 
<TABLE>
  
<TBODY>
分享到:
评论

相关推荐

    Spring MVC 向导控制器完整的例子

    这是一个简单完整的Spring MVC向导控制器(AbstractWizardFormController)的例子,包含所需的类包,可以运行,也是我重新熟悉Spring 的第二例子,明天再上传Spring 的例外个例子,如有问题,我们可以互相学习下.

    Spring表单向导控制器(实现数据缓存)

    当在网页填写表单信息过多的时候,一般会采用向导式的分页填写...该例子前端是easyui+Jsp实现,后台是采用了spirng @SessionAttributes(替代新版本spring不支持AbstractWizardFormController)这个注解实现表单控制器

    开源框架 Spring Gossip

    实作 Validator 使用 PropertyEditor 档案上传 &lt;br&gt; &lt;br&gt;View层方案、Web框架整合 当使用JSP作为View层技术时,您可以结合JSTL以及Spring提供的标签,而除了JSP技术作为View层之外,Spring还...

    SPRING API 2.0.CHM

    AbstractWizardFormController AbstractXmlApplicationContext AbstractXsltView AcceptHeaderLocaleResolver ActionRequestWrapper ActionServletAwareProcessor ActionSupport AdaptableJobFactory ...

    天然气汽车供气系统减压装置毕业设计(cad+设计方案).zip

    天然气汽车供气系统减压装置毕业设计(cad+设计方案)

    PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

    PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

    NumPy 的用途是什么

    NumPy 的用途是什么

    毕业设计 基于javaweb的在线答题平台

    毕业设计 基于javaweb的在线答题平台

    基于MATLAB的pca人脸识别.zip

    基于MATLAB的pca人脸识别.zip

    课设毕设基于SSM的信息类课程教学知识管理系统LW+源码可运行.zip

    课设毕设基于SSM的系统源码可运行

    JAVAWML信息查询与后端信息发布系统实现-WML信息查询设计(源代码+LW).zip

    JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+LW)

    毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

    毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

    熊猫脚本助手V1.8.zip

    可以自动刷课,执行重复的脚本工作,内有详细操作教程。支持WIN7---WIN10系统。

    Java项目之实验室计算机故障报修系统(源码)

    Java项目之实验室计算机故障报修系统(源码) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9

    使用hapi框架搭建 基于协同过滤的美食推荐系统——后台.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

    JAVAWEB校园二手平台项目.zip

    JAVAWEB校园二手平台项目,基本功能包括:个人信息、商品管理;交易商品板块管理等。本系统结构如下: (1)本月推荐交易板块: 电脑及配件:实现对该类商品的查询、用户留言功能 通讯器材:实现对该类商品的查询、用户留言功能 视听设备:实现对该类商品的查询、用户留言功能 书籍报刊:实现对该类商品的查询、用户留言功能 生活服务:实现对该类商品的查询、用户留言功能 房屋信息:实现对该类商品的查询、用户留言功能 交通工具:实现对该类商品的查询、用户留言功能 其他商品:实现对该类商品的查询、用户留言功能 (2)载入个人用户: 用户登陆 用户注册 (3)个人平台: 信息管理:实现对商品的删除、修改、查询功能 添加二手信息:实现对新商品的添加 修改个人资料:实现对用户个人信息的修改 注销

    基于协同过滤和SVD算法的音乐推荐系统.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

    Java游戏设计打飞机程序(源代码+LW).zip

    Java游戏设计打飞机程序(源代码+LW)

    Matlab实现CoMP多用户注水算法在最最基础的注水算法的基础上,

    Matlab实现CoMP多用户注水算法在最最基础的注水算法的基础上,实现了在功率受限速率受限的情况下CoMP多用户的功率分配.zip

    利用PCA算法的 Eigenface 人脸识别的训练与识别

    自己写代码实现 Eigenface 人脸识别的训练与识别过程,纯手工实现 假设每张人脸图像只有一张人脸,且两只眼睛位置已知(即可人工标注给出)。每张图像的眼睛位置存在相应目录下的一个与图像文件名相同但后缀名为 txt 的文本文件里,文本文件中用一行、以空格分隔的 4 个数字表示,分别对应于两只眼睛中心在图像中的位置; 实现两个程序过程(两个执行文件),分别对应训练与识别; 自己构建一个人脸库(至少 40 人,包括自己),课程主页提供一个人脸库可选用; 不能直接调用 OpenCV 里面与 Eigenface 相关的一些函数,特征值与特征向量求解函数可以调用;只能用 C/C++/Python,不能用其他编程语言;GUI 只能用 OpenCV 自带的 HighGUI,不能用 QT 或其他的;平台可以用 Win/Linux/MacOS,建议 Win 优先;

Global site tag (gtag.js) - Google Analytics