`
isiqi
  • 浏览: 16479208 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用ActionForm一次获取表单所有参数

阅读更多
用过Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在为要给ActionForm编写一大堆setter和getter方法而感到厌倦和疲惫呢?的确,我是厌倦了,所以我要寻求新的方法。我第一反映就是想使用Map接口,将所有的表单参数全部放进HashMap中,然后在Action中get出这个Map,并进行业务逻辑的操作。有了想法当然要去试验了,实践才是检验真理的唯一标准。
首先要编写一个扩展ActionForm的类。代码如下(由于篇幅,我只列出了代码的关键部分):

12   package com.jacktan.struts.formbean;
34   import java.util.*;
5    import javax.servlet.http.*;
6    import org.apache.struts.action.*;
8    public class CustomForm extends ActionForm {
10    private Map formvalueMap = new HashMap();
12    public void setFormvalueMap(Map p_FormvalueMap){
14    this.formvalueMap = p_FormvalueMap;
15   }
16    public Map getFormvalueMap(){
18      return this.formvalueMap;
19   }
20    public void setFormvalue(String key,Object value){
22    formvalueMap.put(key,value);
23    }
24     public Object getFormvalue(String key){
26        return formvalueMap.get(key);
27    }
28   }

  下面对上面的代码一一做解释:

  第11行定义了一个HashMap类的实例变量,这个Map用于存放表单递交上来的参数值,作为键值对存在;
第13行的setFormvalueMap()方法用于设置实例变量formvalueMap;

  第17行的getFormvalueMap()方法用于获取实例变量formvalueMap,这个方法将在Action类中调用,替代了以前在Action类中调用大量的(CustomForm)form.getXXX()方法;

  第21行是关键的方法,setFormvalue()这个方法就是取代以前在ActionForm中大量的setXXX()方法,用于接受表单传递上来的输入值。注意这个方法的参数,key是一个String类型的,用作Map的key,value是Object类型的,这个参数就是表示表单传送过来的各个输入值。

  第25行是getFormvalue()方法,用于从Map中根据key返回一个value对象。

  好了,ActionForm的任务完成了,不过离目标还有好大一段距离,目前只完成了三分之一的工作。我们继续干!

  有了ActionForm接下来就是要编写Action类了,代码如下(由于篇幅,我只列出了代码的关键部分):

12   package com.jacktan.struts.action;
34   import java.util.*;
5    import javax.servlet.http.*;
6    import org.apache.struts.action.*;
8    import com.jacktan.struts.formbean.CustomForm
10   public class CustomAction extends Action {
12     public ActionForward execute(ActionMapping p_Mapping,
15         ActionForm p_Form,
16         HttpServletRequest p_Request,
17         HttpServletResponse p_Response) 
18      throws Exception{
21        Map formvalues =((CustomForm)p_Form).getFormvalueMap();
23          return p_Mapping.findForward("Success");
25      }
26   }

  CustomAction类的关键行在第21-22行,使用在CustomForm类中定义的 getFormvalueMap()方法一次就将表单中所有的提交参数收集完毕,省掉了以前要使用很多getXXX()方法从ActionForm中获取表单值的做法。
 好了,接下来是要编写JSP页面了,因为我们的ActionForm使用特殊的方法接受参数值,所以在写表单页面的时候也要使用特殊的签名。代码如下:

<html:form action="login">
<table width="100%"  border="0">
 <tr>
  <td width="3%"> ;</td>
  <td width="31%"> ;</td>
  <td width="66%" rowspan="6" valign="top">
   <html:errors/>
  </td>
 </tr>
 <tr>
  <td> ;</td>
  <td height="25">用户名</td>
 </tr>
 <tr>
  <td> ;</td>
  <td height="25">
   <html:text property="formvalue(username)" size="12" maxlength="12"/></td>
 </tr>
 <tr>
  <td> ;</td>
  <td height="25">密码</td>
 </tr>
 <tr>
  <td> ;</td>
  <td height="25">
   <html:password property="formvalue(password)" size="12" maxlength="12" redisplay="false"/>
  </td>
 </tr>
 <tr>
  <td> ;</td>
  <td height="25">
   <html:submit value="登录"/> <html:button property="close" value="关闭" onclick="Close()"/>
  </td>
 </tr>
</table>

  上面是一个用户登录的界面,注意红色的部分,这个签名要和CustomForm类中的setFormvalue()签名保持一致,注意大小写,Struts会利用Java的反射机制寻找到合适的方法调用。formvalue(username)圆括号中的字符串可以是表示该输入域在数据库中字段的映射,也可以是自己自定义的字符串,这个字符串将作为Map的key保存。

  好了,终于要完成了,最后要做的就是设置struts的配置文件了,打开struts-config.xml文件,

  在<form-beans>段输入以下代码:

<form-beans>
<form-bean 
name="CustomForm" 
type="com.jacktan.struts.formbean.CustomForm"/>
</form-beans>

  在<action-mappings>段输入以下代码:

<action
path="/login" 
type="com.jacktan.struts.action.CustomAction"
name="addDeviceForm"
scope="request">
<forward name="login" path="main.jsp"/>
</action>

  大功告成,所有的任务都完成了。为了检测是否可以正确运行,我在Action类中加入如下测试代码:

1 Set set = formvalues.entrySet();
2 Iterator it = set.iterator();
3 while( it.hasNext() ){
4  Map.Entry me = (Map.Entry)it.next();
5  System.out.println((String)me.getKey);
6  System.out.println((String)me.getvalue);
7 }

  以上代码将在Tomcat的控制台中打印出所有表单提交的参数值,你也可以使用Struts中log4j组件在日志文件中输入。好了,就写到这里吧,以上就是使用Map将表单提交的数据一次性获取,并在Action中调用的全部工作内容,希望对大家使用Struts做开发的兄弟有所提示和启发。
分享到:
评论

相关推荐

    ActionForm

    【ActionForm】是Java Web开发中的一个概念,主要在Struts框架中被广泛使用。它是一种模型层对象,用于接收用户从视图层(通常是一个HTML表单)传递过来的数据,并将这些数据转发到控制器(Controller)进行业务逻辑...

    struts1.2 from表单提交包含list的对象

    在表单提交后,Struts的默认数据绑定机制会尝试将请求参数自动绑定到ActionForm的属性上。 接着,Action类会接收到ActionForm实例,可以通过这个实例获取到用户提交的数据。在处理业务逻辑时,Action可以对这个列表...

    ActionForm里的get和set方法

    当用户在表单中填写数据并提交时,Struts框架会创建一个ActionForm实例,并自动调用对应字段的set方法,将请求参数填充到ActionForm中。 2. **get和set方法的作用** - **set方法**:在用户提交表单后,Struts框架...

    actionForm list

    ActionForm类的实现可以包括自定义的setter和getter方法,用于设置和获取表单数据,以及可能的validate()方法,用于在业务处理前验证数据。 **工具应用** 在实际开发中,开发者可能会使用IDE如Eclipse或IntelliJ ...

    struts ActionForm

    Struts ActionForm是Java Web开发中Struts框架的一个核心组件,主要用于处理用户在表单中的输入数据。在早期的Struts 1版本中,ActionForm是MVC设计模式中的Model部分,它作为控制器(Controller)与视图(View)...

    [摘]Struts 学习笔记之ActionForm

    - Struts使用`RequestUtils.copyRequestToForm(request, form)`方法将请求参数自动绑定到ActionForm对象中。 - 这种自动绑定使得开发者可以方便地获取和验证用户输入。 3. **数据验证** - ActionForm类中可以...

    Struts中不同的Action和ActionForm组合.rar

    ActionForm中定义了表单字段,Action通过ActionForm获取用户输入的数据并进行业务处理。 - **Struts 2的方式**: 在Struts 2中,Action可以直接访问请求参数,无需ActionForm作为中介。Action可以通过模型驱动方式...

    关于struts表单验证

    本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证错误。 首先,ActionForm Bean是Struts框架中用于存储和管理用户输入数据的Java对象。它需要...

    ActionForm属性中存在对象数组如何处理

    在Struts框架中,ActionForm类是用于封装请求参数并传递到Action类进行业务逻辑处理的关键组件。...通过这种方式,Struts框架能够处理ActionForm中包含对象数组的场景,允许用户在一次表单提交中处理多个对象实例。

    struts1.x 和 struts2.x向Action里填充jsp参数原理

    6. 在Action类中,可以直接访问ActionForm中的属性,获取JSP页面传来的参数。 Struts2.x的工作原理: Struts2基于拦截器(Interceptor)模型,它的核心是StrutsPrepareAndExecuteFilter,这个过滤器负责拦截请求并...

    struts表单基本操作含分页代码

    - **参数传递**: 通过URL参数传递当前页码和每页条数,以便在Action中获取并计算查询范围。 - **JSP展示**:使用迭代器显示分页结果,同时提供上一页/下一页的链接。 4. **Struts处理用户请求**: - **Action类*...

    struts form 表单 用法

    在`execute`方法中,我们可以通过`ActionForm`参数获取到Form Bean实例,并访问其中的属性。处理完用户输入后,使用`ActionMapping`的`findForward`方法返回结果视图。 **5. 结合HTML `<form>`标签** 虽然Struts...

    java获取路径的各种方法

    2. **request.getParameter()**:这个方法用于获取请求参数,而不是路径。但是,如果用户通过表单上传文件,可以获取到文件的路径,如`request.getParameter("myFile")`。 3. **ActionForm.getMyFile()**:在Struts...

    Struts2 ——4、struts2从请求取值的三种方式

    你需要创建一个ActionForm类,然后在Action类中使用ActionMapping对象来获取表单数据: ```java public class MyActionForm { private String name; // getter and setter } public class MyAction extends ...

    struts 一次更新多条记录 例子

    // 使用request对象获取表单数据 Map, String[]> params = request.getParameterMap(); for (String key : params.keySet()) { if (key.startsWith("recordsToBeUpdated")) { Record record = new Record(); /...

    03-Form-Data-Chinese.pdf

    在服务器端,无论是Servlet还是Struts框架,都会使用`HttpServletRequest`对象来获取表单数据。例如,可以通过`getParameter`方法来读取单个请求参数的值: ```java String firstName = request.getParameter(...

    struts调用流程总结,适用于初学者.

    - RequestProcessor会调用ActionForm的`reset()`方法清空属性值,然后从HttpServletRequest中获取表单数据填充到ActionForm。 - 如果配置了`validate=true`,RequestProcessor会调用ActionForm的`validate()`方法...

    struts配置文件[定义].pdf

    `collection`属性可以是一个ActionForm Bean的属性名,`property`用于获取每个选项的值。 通过这些标签,开发者可以在JSP页面中轻松地创建动态表单,并将表单数据与后台的ActionForm Bean绑定,实现了数据的前端...

    一个Struts1多文件上传实例(附Form中传List示例)

    要实现多文件上传,需要在HTML表单中使用`<input type="file" multiple>`标签,并在ActionForm中定义一个List或数组来存储上传的文件。 3. **Form中的List参数**: 表单中可以包含一个List类型的参数,允许用户...

Global site tag (gtag.js) - Google Analytics