Struts-分页表单

来源:互联网 发布:冰岛语消失知乎 编辑:程序博客网 时间:2024/04/29 10:10

有时候,由于表单数据太多,无法在同一个页面显示(如用于用户注册的表单),可以把它拆分成多个表单,分多个页面显示,在这种情况下,即可以为每个表单创建单独的ActionForm,也可以只创建一个ActionForm,它和多个表单对应,下面就来介绍通过struts来实现此功能,本例使用一个ActionForm共享多个表单的机制来实现,运行截图如下:

1.进入首页,输入帐号与手机信息:

2.点击“下一页”,进入下页表单页面:

3.最后输入信息点击“提交”后,显示用户输入的信息:

4.同时如果用户在表单提交中出现错误给予提示信息:

下面就是相应的代码:

1.表单的第一页index.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><!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=UTF-8"><title>分页表单</title></head><body>  <html:form action="/nextPageForm.do" method="post">  <html:hidden property="page" value="1" />  <table>    <tr>       <td>帐号:</td>       <td><html:text property="name" size="14" /></td>       <td><font color="red"><html:errors property="name" /></font></td>    </tr>    <tr>       <td>手机:</td>       <td><html:text property="phone" size="14" /></td>       <td><font color="red"><html:errors property="phone" /></font></td>    </tr>    <tr>       <td colspan="2">          <html:submit>下一页</html:submit>          <html:reset>重置</html:reset>       </td>    </tr>  </table>  </html:form></body></html>

2.表单的第二页next.jsp视图:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><!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=UTF-8"><title>分页表单</title></head><body>  <html:form action="/confirmAction.do">  <html:hidden property="page" value="2" />      邮箱:<html:text property="email" />      <font color="red"><html:errors property="email" /></font>      <br />      <html:button property="prePage" onclick="location.href='index.jsp'">上一页</html:button>      <html:submit>提交</html:submit>      <html:reset>重置</html:reset>  </html:form></body></html>
3.对应的信息息确认画面confirm.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><!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=UTF-8"><title>信息确认</title></head><body><logic:present name="insertForm">   帐号:<bean:write name="insertForm" property="name" /><br />   手机:<bean:write name="insertForm" property="phone" /><br />   邮件:<bean:write name="insertForm" property="email" /><br /></logic:present></body></html>
注意:上面的表单页面视图中,采用一个隐藏域page来标记当前表单的页数,这样做方便ActionForm后台的检证与reset()恢复默认值的操作。

4.相应的ActionForm代码:

package test.struts.form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionMessage;public class InsertForm extends ActionForm {private String name;private String phone;private String email;private String page = null;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPage() {return page;}public void setPage(String page) {this.page = page;}public void reset(ActionMapping mapping, HttpServletRequest request) {int numPage = 0;try {numPage = Integer.parseInt(request.getParameter("page"));} catch(NumberFormatException e) {}if(numPage==1) {name=null;phone=null;} else if (numPage==2) {email=null;}page=null;}public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {ActionErrors errors = new ActionErrors();int numPage = 0;try {numPage = Integer.parseInt(page);} catch(NumberFormatException e) {}if (numPage==1){if(name==null||name.length()<=0) {errors.add("name", new ActionMessage("error.name.requried"));}if(phone==null||phone.length()<=0) {errors.add("phone", new ActionMessage("error.phone.requried"));}} else if(numPage==2) {if (email==null||email.length()<=0) {errors.add("email", new ActionMessage("error.email.requried"));}}return errors;}}
上面的ActionForm通过page来判断对不同页面的不同处理;这在里要注意到在reset()方法中使用request的方式来得到page,而不是直接通过page属性来判断处理的是哪一页,是因为Struts框架先调用reset()方法之后,才把用户输入的表单数据组装到ActionForm中,因此要通过request对象得到;而执行validate()方法时Struts框架在调用validate()方法之前就已经把用户输入的表单数据组装到ActionForm中,因此可以直接根据page属性来判断页面。

5.Struts配置文件struts-config.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC       "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"       "http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config>    <form-beans>        <form-bean name="insertForm" type="test.struts.form.InsertForm" />    </form-beans>        <action-mappings>       <action path="/nextPageForm" name="insertForm"          validate="true" input="/index.jsp"          scope="session" parameter="/next.jsp"          type="org.apache.struts.actions.ForwardAction" >       </action>       <action path="/confirmAction" name="insertForm"          validate="true" input="/next.jsp"          scope="session" parameter="/confirm.jsp"          type="org.apache.struts.actions.ForwardAction" >       </action>    </action-mappings>        <message-resources parameter="application" /></struts-config>
由于在这里只是简单的数据传递,没有涉及到业务逻辑代码,因此没有构建自定义的Action类,而是使用了Struts框架的内置Action:ForwardAction。

注意:在使用ForwardAction类时在Struts1.3中注意引入struts-extras-1.3.10.jar包,它其中包含了一些Struts框架内置的Action类。

最后给出上面示例中引入的application.properties资源文件,如下:

error.email.requried=邮件为必须项!error.name.requried=帐号为必须项!error.phone.requried=手机为必须项!

原创粉丝点击