最简单的Struts程序(3)---处理表单跨页(参考孙卫琴的struts一书)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

处理表单跨页(参考孙卫琴的struts一书)

前言:有时,表单数据太多,无法在同一个页面显示,需要分页完成(如用户注册表单)。这时,既可以为每一个表单创建一个ActionForm,也可以只创建一个ActionForm,它和多个表单对应。

       这里我们把注册表单拆分为两个表单:第一个在insertContent.jsp中定义,包括namephone字段,第二个表单在insertContent_next.jsp中定义,包括address字段。

1. HTML表单拆分到多个JSP页面中

       insertContent.jsp

<%@ page contentType="text/html;charset=gb2312" language="java"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html:html>

<head>

    <html:base />

</head>

<body>

    <html:errors />

    <html:form action="/insert1.do" focus="title">

       <html:hidden property="page" value="1" /> 

<!—-  定义一个隐含字段,它代表当前页面编号,AcitonForm将通过这个字段来识别当前正在处理的是哪个表单。 -->

       <center>

           <table border="0" cellspacing="2" cellpadding="2" width="100%">

              <tr>

                  <td align="right">

                     <bean:message key="prompt.name" />

                  </td>

                  <td>

                     <html:text property="name" size="25" maxlength="25" />

                  </td>

              </tr>

              <tr>

                  <td align="right">

                     <bean:message key="prompt.phone" />

                  </td>

                  <td>

                     <html:text property="phone" size="25" maxlength="10" />

                  </td>

              </tr>

              <tr>

                  <td align="right">

                     <html:submit property="submit" value="next">

                         <bean:message key="button.next" />

                     </html:submit>

                  </td>

                  <td align="left">

                     <html:reset>

                         <bean:message key="button.reset" />

                     </html:reset>

                  </td>

              </tr>

           </table>

       </center>

    </html:form>

</body>

</html:html>

 

 

 

 

       insertContent_next.jsp

 

 

<%@ page contentType="text/html;charset=gb2312" language="java"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html:html>

<head>

    <html:base />

</head>

<body>

    <html:errors />

    <html:form action="/insert2.do" focus="title">

       <html:hidden property="page" value="2" />

       <center>

           <table border="0" cellspacing="2" cellpadding="2" width="100%">

              <tr>

                  <td align="right">

                     <bean:message key="prompt.address" />

                  </td>

                  <td>

                     <html:text property="address" size="25" maxlength="50" />

                  </td>

              </tr>

              <tr>

                  <td align="right">

                     <html:submit property="submit">

                         <bean:message key="button.insert" />

                     </html:submit>

                  </td>

                  <td align="left">

                     <html:reset>

                         <bean:message key="button.reset" />

                     </html:reset>

                  </td>

              </tr>

           </table>

       </center>

    </html:form>

</body>

</html:html>

 

 

以上两个表单分别对应不同的Action: /insert1”和“/insert2”,但是这两个Action与同一个ActionForm映射。

 

 

2.创建和多个HTML表单对应的ActionFormInsertForm.java

package forms;

 

 

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionMessage;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

 

 

/**

 * <strong>InsertForm</strong> handles the form that the user will use to

 * insert a new Address into the database.

 */

 

 

public final class InsertForm extends ActionForm {

 

 

       private String name = null;

 

 

       private String phone = null;

 

 

       private String address = null;

 

 

       private String page = null;

 

 

       public String getName() {

              return name;

       }

 

 

       public String getPhone() {

              return phone;

       }

 

 

       public String getAddress() {

              return address;

       }

 

 

       public String getPage() {

              return page;

       }

 

 

//根据“page”的值处理不同的字段

       public void reset(ActionMapping mapping, HttpServletRequest request) {

              int numPage = 0;

              try {

                     numPage = new Integer(request.getParameter("page")).intValue();

              } catch (Exception e) {

              }

              if (numPage == 1) {

                     name = null;

                     phone = null;

              }

              if (numPage == 2) {

                     address = null;

              }

              page = null;

       }

 

 

       public void setName(String name) {

              this.name = name;

       }

 

 

       public void setPhone(String phone) {

              this.phone = phone;

       }

 

 

       public void setAddress(String address) {

              this.address = address;

       }

 

 

       public void setPage(String page) {

              this.page = page;

       }

 

 

       public ActionErrors validate(ActionMapping mapping,

                     HttpServletRequest request) {

 

 

              ActionErrors errors = new ActionErrors();

              int numPage = 0;

              try {

                     numPage = new Integer(page).intValue();

              } catch (Exception e) {

              }

              if (numPage == 1) {

                     if (((name == null) || (name.length() < 1)))

                            errors.add("name", new ActionMessage("error.name.required"));

                     if (((phone == null) || (phone.length() < 1)))

                            errors.add("phone", new ActionMessage("error.phone.required"));

              }

 

 

              if (numPage == 2) {

                     if (((address == null) || (address.length() < 1)))

                            errors.add("address", new ActionMessage(

                                          "error.address.required"));

              }

              return errors;

 

 

       }

}

 

 

3.配置ActionForm和多个Action映射

struts-config.xml

 

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

  <!-- ========== Form Bean Definitions =================================== -->

  <form-beans>             

    <form-bean      name="insertForm"

                    type="forms.InsertForm"/>

  </form-beans>

 

 

 

  <!-- ========== Global Forward Definitions ============================== -->

  <global-forwards>

    <forward   name="confirmation"      path="/jsp.jsp"/>

  </global-forwards>

 

 

 

 

  <!-- ========== Action Mapping Definitions ============================== -->

    <action-mappings>

   <!--当提交第一个表单时,请求由org.apache.struts.actions.ForwardAction来处理,ForwardAction类是Struts框架内置的Action类,它的execute()方法负责把请求再转发给<action>元素的parameter属性指定的WEB组件。-->

    <action   path="/insert1"

              parameter="/insertContent_next.jsp"

              type="org.apache.struts.actions.ForwardAction"

              name="insertForm"

              scope="session"

              input="/insertContent.jsp"

              validate="true">

    </action>

    <action   path="/insert2"

              type="actions.InsertAction"

              name="insertForm"

              scope="session"

              input="/insertContent_next.jsp"

              validate="true">

     </action>

    </action-mappings>

 

  <message-resources parameter="ApplicationResources"/>

 

 

</struts-config>

 

 

 

 

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧 本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。 阅读详情

相关推荐

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

最简单Struts程序3---处理表单

处理表单参考孙卫琴struts)前言:有时,表单数据太多,无法在同面显示,需要分完成(如用户注册表单)。这时,既可以为每表单创建ActionForm,也可以只创建ActionForm,它和多个表单对应。       这里我们把注册表单拆分为两个表单:第个在insertContent.jsp中定义,包括name和phone字段,第二个表单在insertCon

杂记 669

高级数据库--作业及答案

中科大金培权老师的高级数据库课程作业及答案

一杯水果茶!足矣~ 1614

浅入浅出struts

Jsp framework-------struts概述:1、Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 2、采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 3、下载地址:http://jakarta.apache.org/struts

find_java的专栏 523

Struts异常处理

Struts1.1的MVC框架中对视图层和控制层提供了对异常处理的支持。 控制层:Struts的控制器捕获到异常之后,在异常处理代码块中通过创建ActionMessage对象保存异常信息,并把它保存在ActionMessages(或其子类ActionErrors)对象中,然后将其存入request范围(或session范围中)。 视图层:通过标签显示控制器保存的的异常信息。 由于Stru...

wangyun 201

Struts用Token解决重复提交

学习Struts时候难免会有这些比较经典和知识点。重复提交当然是首当其冲,真的比那两种客户端用javascript来的实用,虽然速度上面也许会有点缺陷吧。不过相信不会影响大家对他的喜爱。。如果你看过孙卫琴的那本经典的Struts,也许对我这篇文章也许都不会去理睬了。不过我会用再简单的语言去描述它。往下看吧。。我用的主要原理还是做个中转的Action处理保存Token为了简单演示我

XueJiang's Blog 793

精通Struts1

 颓废了段时间以后,决定要努力学习下,先把以前的东西拾起来。首先学习《精通Struts》第章    Sturts与JavaWeb应用简介1.JavaWeb应用的结构——MVC结构(模块model控制器controler视图view)2.Servlet组件:Servlet运行于Servlet容器内,可以被Servlet容器动态加载,来扩展服务器的功能,并提供特定的服务。

iverson79_82的专栏 1271

stucts入门级图推荐>(精品)

学了个星期的stucts都是在网上找资料和教程看的,大多都是英文的,简单的可以看懂,但是英文的,写得语法都比较烦,所以........进度很慢星期日去海淀图城逛了圈,发现本好精通Struts:基于MVC的Java Web设计与开发>>,个人觉得“值”. 样章下载  样章02   样章16★ 面向Java Web开发者,透彻分析Stru

锻炼肌肉,防止挨揍 2981

Struts与MVC分层理解

转自:http://hi.baidu.com/wang668/blog/item/ce3fc3889fc29a92a5c27219.html  今天参加了个面试,面试中问到上述问题,我当时也很纳闷,就蒙了V层,回来后在网上搜到的信息如下: 问题:请教大侠在Struts中的MVC2设计模式中的二个小问题,能不能给个标准的答案?谢谢! 这些天我学习Struts的MVC2设计模式,有些问题不同的...

weixin_33697898的博客 155

计算机语言——

sql server的经典系统 内幕技术 系列 共四本。   SQLServer2008从入门到精通 《Microsoft SQL Server 2008 Internals》(中译本叫《深入解析SQL Server 2008》) http://people.apache.org/builds/struts/ 《Struts使用开发指南---基于MVC+MyEcli

xiwu1616的专栏 632

struts资源更新

因为版权的原因,文章的内容就不直接帖在这儿。我做了个链接列表。按顺序读就可以了,共7篇文章(6中文1英文),由浅入深,深入浅出地阐述了 Struts的工作流程,难得地是,文章是面向基本上对Struts无所知的读者,当然了,要对jsp/servlet技术、以及model 1 及mode 2(MCV)框架有基本的了解才可以,Struts是Model 2的个比较完美的实现。好了,不多好了,有什么问题

thinkpadleo的专栏 933

JAVA 学习顺序

JAVA 学习顺序

qq_44231628的博客 1674

jsp病历管理系统5u6u3--程序+源码+数据库+调试部署+开发环境

随着信息技术的迅猛发展,医院管理正向信息化和网络化迈进。病历管理系统作为医院信息管理的关键部分,其重要性日益凸显。本研究旨在设计并实现个高效、便捷的病历管理系统,以提升医院病历管理的效率和准确性,减轻医护人员的工作负担,同时保障患者隐私和数据安全。

CK3034的博客 1052

Struts中的Action算是MVC中的model呢还是Controller呢?

       在网上看到许多的材料,似乎对这两个说的不是很明白,我认为,Action应该属于Controller。事实上,在孙卫琴的《精通Struts》和http://dev.21tx.com/2005/04/27/39802.html     的《Struts用户指南》中,都认为Action应该属于Controller。      (1)MVC中,model表示业务数据和业务逻辑(商业逻辑)

1073

J2EE开发的优秀

我所读过的J2EE开发的优秀籍!2006年08月14日 星期 19:42以下的五册籍,笔者推而荐之,笔者自认功利有限,前路绵绵,只愿与各位同仁共勉!  不得不说的当然是《Java编程思想》,我读的是第三版,这本名贯江湖的Java籍让我领会了面向对象的这种语言本身的设计意图,包括为什么要用类,为什么要继承,为什么要多态!实在是本好!能让我们全面了解面向对象初衷!提高编写面向对象程序

十一郎的IT博客 2464

JSP疫情环境下校园宿舍管理系统1m9z0(程序+源码+数据库+调试部署+开发环境)

新冠疫情的持续影响对校园管理提出了更高要求,尤其是人员密集的宿舍区域。传统宿舍管理模式依赖人工登记、线下巡查,存在信息传递滞后、人员流动监控困难、应急响应效率低等问题,难以满足疫情防控下“精准管理、快速溯源”的需求。开发套针对疫情环境的校园宿舍管理系统,能够实现健康信息动态采集、人员轨迹追踪、异常情况预警及资源统筹调配,有效降低疫情传播风险,提升校园安全管理水平。本研究旨在通过数字化手段优化宿舍管理流程,为高校构建安全、高效的疫情防控屏障,具有重要的现实价值和应用前景。

Kittyxia001的博客 1021

java web知识结构

传统的java web应用程序是采用jsp+servlet+javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责显示的 jsp、负责流程逻辑控制的servlet、负责数据封装的javabean。但是这种结构仍然存在问题:如jsp面中需要使用&lt;% %&gt;符号嵌入很多的java代码,造成面结构混乱,servlet和javabean负责了大量的跳转和运算...

SQ更上一层楼穷千里目 148

JAVA知识结构

传统的javaweb应用程序是采用jsp+servlet+javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责显示的jsp、负责流程逻辑控制的servlet、负责数据封装的javabean。但是这种结构仍然存在问题:如jsp面中需要使用<%%>符号嵌入很多的java代码,造成面结构混乱,servlet和javabean负责了大量的跳转和运

阿布客栈 1307

Tomcat与Java Web开发技术详解(第2版)

查看籍详细信息: Tomcat与Java Web开发技术详解(第2版)(含…… 编辑推荐 蕴含Java Web开发的核心思想,阐释Java Web开发的前沿技术和实用技巧,详述Tomcat高级配置方法,面向对象的编程思想贯穿全,穿插UML经典设计模式,精心设计的习题巩固所学知识。   凝聚Java魅力,成就开发专家。看清Java万花筒的本质,从复杂的表象...

weixin_30586257的博客 773
上一篇: ape的基本知识
下一篇: 最简单的Struts程序(4)---Struts应用的国际化(参考孙卫琴的struts一书)
suanqing
博客等级 码龄21年 11粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值