向导是引导用户经过一系列页面的方法。当数据可以分成多组,同时不想在一个页面显示很多的数据,在每个页面只包含一个数据分组。那么向导是非常好的选择。
使用Struts实现页面向导功能:
(1).整体结构如struts-config.xml文件:
<?
xml version="1.0" encoding="UTF-8"
?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >
< struts-config >
< data-sources />
< form-beans >
< form-bean name ="sampleForm" type ="com.heart.struts.form.SampleForm" />
</ form-beans >
< global-exceptions />
< global-forwards >
< forward name ="sample" path ="/clearForm.do" />
</ global-forwards >
< action-mappings >
< action
attribute ="sampleForm"
name ="sampleForm"
path ="/clearForm"
scope ="session"
type ="com.heart.struts.action.ClearForm" >
< forward name ="next" path ="/page1.jsp" />
</ action >
< action
name ="sampleForm"
path ="/sampleAction1"
scope ="session"
forward ="/page2.jsp" />
< action
name ="sampleForm"
path ="/sampleAction2"
scope ="session"
forward ="/page3.jsp" />
< action
attribute ="sampleForm"
name ="sampleForm"
path ="/sampleAction3"
type ="com.heart.struts.action.Submit" >
< forward name ="next" path ="/clearForm.do" />
</ action >
</ action-mappings >
< message-resources parameter ="com.heart.struts.ApplicationResources" />
</ struts-config >
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >
< struts-config >
< data-sources />
< form-beans >
< form-bean name ="sampleForm" type ="com.heart.struts.form.SampleForm" />
</ form-beans >
< global-exceptions />
< global-forwards >
< forward name ="sample" path ="/clearForm.do" />
</ global-forwards >
< action-mappings >
< action
attribute ="sampleForm"
name ="sampleForm"
path ="/clearForm"
scope ="session"
type ="com.heart.struts.action.ClearForm" >
< forward name ="next" path ="/page1.jsp" />
</ action >
< action
name ="sampleForm"
path ="/sampleAction1"
scope ="session"
forward ="/page2.jsp" />
< action
name ="sampleForm"
path ="/sampleAction2"
scope ="session"
forward ="/page3.jsp" />
< action
attribute ="sampleForm"
name ="sampleForm"
path ="/sampleAction3"
type ="com.heart.struts.action.Submit" >
< forward name ="next" path ="/clearForm.do" />
</ action >
</ action-mappings >
< message-resources parameter ="com.heart.struts.ApplicationResources" />
</ struts-config >
整个程序中,index.jsp把用户传送到全局的sample转送点,该sample转送点把请求引导至clearForm.do清除表单属性并显示页面page1.jsp.
Page1.jsp提交到sampleAction1.do将页面转送到page2.jsp
同样page2.jsp通过sampleAction2.do将页面转送到page3.jsp
最后page3.jsp提交给sampleAction3.do使用Submit Action处理数据,并把用户转送回clearForm.do继续进行数据收集工作。
以上代码清单,index.jsp转送到sample全局转发:
<%
...
@ page language="java" pageEncoding="UTF-8"
%>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'index.jsp' starting page </ title >
</ head >
< body >
< logic:forward name ="sample" />
</ body >
</ html >
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'index.jsp' starting page </ title >
</ head >
< body >
< logic:forward name ="sample" />
</ body >
</ html >
clearFormAction清除表单属性:
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.heart.struts.form.SampleForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.action path="/clearForm" name="sampleForm" validate="true"
*/
public class ClearForm extends Action ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
SampleForm sampleForm = (SampleForm) form;
sampleForm.clear();
return mapping.findForward("next");
}
}
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.heart.struts.form.SampleForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.action path="/clearForm" name="sampleForm" validate="true"
*/
public class ClearForm extends Action ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
SampleForm sampleForm = (SampleForm) form;
sampleForm.clear();
return mapping.findForward("next");
}
}
用到表单SampleForm收集数据:
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.form;
import org.apache.struts.action.ActionForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.form name="sampleForm"
*/
public class SampleForm extends ActionForm ... {
/**//*
* Generated fields
*/
/** *//**
*
*/
private static final long serialVersionUID = 1L;
/** *//** productNumber property */
private String productNumber;
/** *//** comment property */
private String comment;
/** *//** quantity property */
private String quantity;
/** *//** firstName property */
private String firstName;
/** *//** lastName property */
private String lastName;
/**//*
* Generated Methods
*/
/** *//**
* Returns the productNumber.
* @return String
*/
public String getProductNumber() ...{
return productNumber;
}
/** *//**
* Set the productNumber.
* @param productNumber The productNumber to set
*/
public void setProductNumber(String productNumber) ...{
this.productNumber = productNumber;
}
/** *//**
* Returns the comment.
* @return String
*/
public String getComment() ...{
return comment;
}
/** *//**
* Set the comment.
* @param comment The comment to set
*/
public void setComment(String comment) ...{
this.comment = comment;
}
/** *//**
* Returns the quantity.
* @return String
*/
public String getQuantity() ...{
return quantity;
}
/** *//**
* Set the quantity.
* @param quantity The quantity to set
*/
public void setQuantity(String quantity) ...{
this.quantity = quantity;
}
/** *//**
* Returns the firstName.
* @return String
*/
public String getFirstName() ...{
return firstName;
}
/** *//**
* Set the firstName.
* @param firstName The firstName to set
*/
public void setFirstName(String firstName) ...{
this.firstName = firstName;
}
/** *//**
* Returns the lastName.
* @return String
*/
public String getLastName() ...{
return lastName;
}
/** *//**
* Set the lastName.
* @param lastName The lastName to set
*/
public void setLastName(String lastName) ...{
this.lastName = lastName;
}
public void clear() ...{
setComment("");
setFirstName("");
setLastName("");
setProductNumber("");
setQuantity("");
}
}
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.form;
import org.apache.struts.action.ActionForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.form name="sampleForm"
*/
public class SampleForm extends ActionForm ... {
/**//*
* Generated fields
*/
/** *//**
*
*/
private static final long serialVersionUID = 1L;
/** *//** productNumber property */
private String productNumber;
/** *//** comment property */
private String comment;
/** *//** quantity property */
private String quantity;
/** *//** firstName property */
private String firstName;
/** *//** lastName property */
private String lastName;
/**//*
* Generated Methods
*/
/** *//**
* Returns the productNumber.
* @return String
*/
public String getProductNumber() ...{
return productNumber;
}
/** *//**
* Set the productNumber.
* @param productNumber The productNumber to set
*/
public void setProductNumber(String productNumber) ...{
this.productNumber = productNumber;
}
/** *//**
* Returns the comment.
* @return String
*/
public String getComment() ...{
return comment;
}
/** *//**
* Set the comment.
* @param comment The comment to set
*/
public void setComment(String comment) ...{
this.comment = comment;
}
/** *//**
* Returns the quantity.
* @return String
*/
public String getQuantity() ...{
return quantity;
}
/** *//**
* Set the quantity.
* @param quantity The quantity to set
*/
public void setQuantity(String quantity) ...{
this.quantity = quantity;
}
/** *//**
* Returns the firstName.
* @return String
*/
public String getFirstName() ...{
return firstName;
}
/** *//**
* Set the firstName.
* @param firstName The firstName to set
*/
public void setFirstName(String firstName) ...{
this.firstName = firstName;
}
/** *//**
* Returns the lastName.
* @return String
*/
public String getLastName() ...{
return lastName;
}
/** *//**
* Set the lastName.
* @param lastName The lastName to set
*/
public void setLastName(String lastName) ...{
this.lastName = lastName;
}
public void clear() ...{
setComment("");
setFirstName("");
setLastName("");
setProductNumber("");
setQuantity("");
}
}
注意,去掉了reset方法,Struts默认要在填充FormBean之前调用reset方法,每次页面提交时,所有输入的数据都将被清楚。
Page1.jsp:
<%
...
@ page language="java" pageEncoding="UTF-8"
%>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page1.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 1 </ h1 >
< html:form action ="/sampleAction1" >
first name < html:text property ="firstName" />
< br >
last name < html:text property ="lastName" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page1.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 1 </ h1 >
< html:form action ="/sampleAction1" >
first name < html:text property ="firstName" />
< br >
last name < html:text property ="lastName" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
Page2.jsp
<%
...
@ page language="java" pageEncoding="UTF-8"
%>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page2.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 2 </ h1 >
< html:form action ="/sampleAction2" >
ProductNumber < html:text property ="productNumber" />
< br >
Quantity < html:text property ="quantity" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page2.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 2 </ h1 >
< html:form action ="/sampleAction2" >
ProductNumber < html:text property ="productNumber" />
< br >
Quantity < html:text property ="quantity" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
Page3.jsp:
<%
...
@ page language="java" pageEncoding="UTF-8"
%>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page3.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 3 </ h1 >
< html:form action ="/sampleAction3" >
comment < html:text property ="comment" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<% ... @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > My JSP 'page3.jsp' starting page </ title >
< html:base />
</ head >
< body >
< h1 > wizard - page 3 </ h1 >
< html:form action ="/sampleAction3" >
comment < html:text property ="comment" />
< p >
< html:submit value ="next" />
</ html:form >
</ body >
</ html >
Page3.jsp把请求转送到SubmitAction进行SampleForm表单数据的最后处理。
Submit:
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.heart.struts.form.SampleForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.action path="/sampleAction3" name="sampleForm" validate="true"
*/
public class Submit extends Action ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
SampleForm sampleForm = (SampleForm) form;
System.out.println(sampleForm.getFirstName());
System.out.println(sampleForm.getLastName());
System.out.println(sampleForm.getProductNumber());
System.out.println(sampleForm.getQuantity());
System.out.println(sampleForm.getComment());
sampleForm.clear();
return mapping.findForward("next");
}
}
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.heart.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.heart.struts.form.SampleForm;
/** */ /**
* MyEclipse Struts
* Creation date: 09-20-2007
*
* XDoclet definition:
* @struts.action path="/sampleAction3" name="sampleForm" validate="true"
*/
public class Submit extends Action ... {
/**//*
* Generated Methods
*/
/** *//**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) ...{
SampleForm sampleForm = (SampleForm) form;
System.out.println(sampleForm.getFirstName());
System.out.println(sampleForm.getLastName());
System.out.println(sampleForm.getProductNumber());
System.out.println(sampleForm.getQuantity());
System.out.println(sampleForm.getComment());
sampleForm.clear();
return mapping.findForward("next");
}
}
此示例中只把收集到的表单数据输出,同样的,可以在此调用业务层逻辑进行数据处理。
最后调用sampleForm.clear()清空属性,并把请求转至另一个页面。