处理表单跨页

 

前言:有时,表单数据太多,无法在同一个页面显示,需要分页完成(如用户注册表单)。这时,既可以为每一个表单创建一个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

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 >

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;
       }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值