`
hilly
  • 浏览: 50588 次
  • 性别: Icon_minigender_1
  • 来自: **
社区版块
存档分类
最新评论

[Struts]应用Map作为ActionForm的属性,动态增加ActionForm的“属性” (转)

阅读更多
通常情况下,我们要在ActionForm中为相应表单定义对应的私有属性,再通过Getter和Setter设置和获得表单的数据。

但如果表单数据域比较多,那么就需要在ActionForm中为每个表单域定义一个私有属性并定义相应的Getter、Setter方法。

解决方法有两种,一种是在ActionForm中定义一个Map私有属性,动态产生表单提交的数据域;另一种是使用DynaActionForm。

这里,我想以一个例子介绍一下第一种方法。

首先创建ActionForm类:TestForm
 1package form;
 2
 3import org.apache.struts.action.ActionForm;
 4import java.util.HashMap;
 5
 6public class TestForm extends ActionForm {
 7  private HashMap<String,Object> map = new HashMap<String,Object>();
 8
 9  public Object getValue(String key) {
10    return map.get(key);
11  }

12
13  public void setValue(String key,Object value) {
14    map.put(key,value);
15  }

16
17}

请注意第7行,这里定义了一个私有变量,该变量是一个Map类。
第9、13行分别定义了Getter和Setter方法,这里,Getter方法需要一个参数,用于传递表单域(即动态属性)的名称,Setter方法需要两个参数,分别是表单域名称和对应的值,这和传统的ActionForm的Getter和Setter有很大分别。

然后创建Action类:TestAction

 1package action;
 2
 3import org.apache.struts.action.Action;
 4import org.apache.struts.action.ActionMapping;
 5import org.apache.struts.action.ActionForm;
 6import org.apache.struts.action.ActionForward;
 7import java.util.HashMap;
 8import javax.servlet.http.*;
 9
10public class TestAction extends Action {
11  public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {
12    return mapping.findForward("success");
13  }

14}

第8行,鉴于这是一个例子为了简便起见使用了“*”代替了具体的类,编写程序时还是需要培养良好的习惯引入相应的类,避免出现冲突。
这个类很简单,只是把请求传递到一个在Struts中命名为“success”的forward对应的页面,具体请看下面列出的struts-config.xml当中的配置。

然后是输入表单的JSP页面:input.jsp

1<%@ taglib uri="/tags/struts-html" prefix="html" %>
2
3<html:form action="/Test.do" method="post">
4   <html:text property="value(a)"/>
5   <html:text property="value(b)"/>
6   <html:submit>Submit</html:submit>
7</html:form>


第1行引入了Struts的html标签库
请注意第4、5行,如果使用传统的ActionForm,property的值应该与ActionForm里面的一个私有属性的名称对应,但在这里,请回忆上述ActionForm中的Getter和Setter方法,分别带有一个参数和两个参数,这里的property会通过反射机制自动调用Setter方法,“value(a)”中的“value”就是ActionForm中Map的名称,而括号当中的“a”,就是我们动态产生的表单域的名称,它对应Getter方法中的第一个参数“key”,而用户在表单输入的值就对应Setter方法中的第二个参数“value”。

这里,我们分别动态创建了两个名为“a”和“b”的表单域,存放到Map中。

然后,我们看看success.jsp即Action转发到的页面

1<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
2
3<bean:write name="test" property="value(a)"/>
4<bean:write name="test" property="value(b)"/>


第1行引入了Struts的bean标签库。
请注意第2行,引用了名为“test”的ActionForm(详细设置请看struts-config.xml)。这标签的作用是显示输出ActionForm的指定属性值。请注意property,“value”就是ActionForm中Map的名称,它通过反射机制自动调用ActionForm的Getter方法,请回忆上述ActionForm中的Getter方法,带有一个参数“key”,这里的“a”,“b”实际上是对应刚才输入页面动态产生的两个表单域属性名。这里实际是要显示名为“test”的ActionForm的名为“value”的Map类属性中的“key”分别为“a”和“b”的对应的“value”。

通过这样的设计,我们就完成了动态产生表单域属性的功能,这个设计的好处是你并不需要修改ActionForm,就能随意设计你的表单域属性,也大大减少了ActionForm的编码量。

最后,让我们来看看struts-config.xml中的相应配置(只列出相关配置片断):

 

 1<struts-config>
 2  
 3  <form-beans>
 4    <form-bean name="test" type="form.TestForm"/>
 5  </form-beans>
 6  
 7  <action-mappings>
 8     <action name="test" path="/Test" type="action.TestAction">
 9        <forward name="success" path="/pages/success.jsp"/>
10      </action>
11   </action-mappings>
12   
13</struts-config>

 

分享到:
评论

相关推荐

    Struts_学习笔记之ActionForm

    Struts学习笔记之ActionForm ActionForm是Struts框架中的一种重要组件,用于封装和处理用户的表单数据。在Struts中,ActionForm是继承自JavaBeans的,主要用于处理用户的表单数据和业务逻辑。下面是ActionForm的...

    struts课堂资料\第五章(动态ActionForm与控制器)2

    动态ActionForm通过实现org.apache.struts.action.DynaActionForm接口实现,它的属性可以通过Map对象动态添加和访问。 **ActionForm中的reset()方法**:在用户提交表单前,如果在ActionForm中有预设值,reset()方法...

    Struts1 控制器组件和动态表单详解

    本篇将深入探讨Struts1的控制器组件以及动态ActionForm的概念。 **Struts1控制器组件** 1. **ActionServlet组件**: ActionServlet是Struts1框架的中心控制器。它接收HTTP请求,通过doGet或doPost方法处理这些请求...

    Struts 之旅 - 动态表单

    在处理动态表单时,Struts框架的ActionForm类起着关键作用。ActionForm对象作为控制器和模型之间的桥梁,用于接收和验证来自表单的用户输入。 1. **动态表单的创建**:在Struts中,我们可以使用JSP(JavaServer ...

    Struts中List里嵌套Map

    在Java Web开发中,Struts框架是一个非常流行的MVC(模型-视图-控制器)架构,用于构建可维护性高、结构清晰的Web应用程序。在处理复杂数据结构时,Struts框架提供了灵活的数据绑定能力,其中包括在List中嵌套Map的...

    struts html标签例子

    2. `&lt;html:text&gt;`:用于创建输入文本字段,其`name`属性对应ActionForm中的属性名,这样表单提交后,Struts框架会自动将该字段的值绑定到对应的ActionForm属性。 3. `&lt;html:password&gt;`:与`&lt;html:text&gt;`类似,但...

    struts1.x html标签 radio,checkbox,multibox,select的使用

    通过`list`属性,可以将选项数据源绑定到ActionForm的属性,从而动态生成选项列表。 在实际应用中,`StrutsMapActionForm`可能是ActionForm的一个实例,它包含了一个或者多个Map对象来存储这些HTML标签的值。例如,...

    Struts1和Struts2的比较

    - **Struts2**:Action的属性直接作为输入属性,可以是丰富的对象类型,无需额外的输入对象。支持直接使用业务或领域对象作为输入和输出。 6. **模型驱动特性** - **Struts1**:依赖JSTL的表达式语言,功能有限。...

    Migrating From Struts1 To Struts2

    随着技术的发展与进步,Struts1作为曾经广泛使用的Web应用框架,逐渐被Struts2等新一代框架所取代。Struts2以其更加灵活的设计、丰富的特性以及更好的性能表现成为众多开发者的首选。本文将深入探讨如何从Struts1...

    struts1与struts2的区别

    - **Struts2**:Action的属性直接作为输入属性,支持多种类型的对象,包括业务或领域对象。模型驱动特性简化了与POJO输入对象的关联。 6. **表达式语言**: - **Struts1**:集成JSTL,使用其EL,功能有限。 - **...

    struts1.2和struts2区别

    - **Struts2**:Action的属性可以直接作为输入属性使用,无需额外的输入对象。这不仅简化了代码结构,还允许使用更丰富的对象类型,如业务或领域对象,作为输入或输出,提高了代码的复用性和表现力。 #### 表达式...

    struts标签库使用

    Struts标签库是Java Web开发中的一个重要组成部分,主要用于构建基于MVC(模型-视图-控制器)架构的应用程序。这个库极大地简化了JSP页面的编写,提供了丰富的标签来处理常见的Web开发任务,如表单处理、数据校验、...

    struts1.2标签实例

    总结,Struts1.2标签实例对于初学者来说是非常有价值的教育资源,它可以帮助开发者快速掌握Struts框架的使用,提升Web应用开发的效率。通过深入理解和实践,开发者可以利用这些标签构建出高效、可维护的用户界面。

    Struts2的执行流程图

    - Struts2的Action可以直接使用其属性作为输入,支持丰富的对象类型,可以直接使用业务或领域对象,无需额外的ActionForm。 6. **模型驱动和表达式语言**: - Struts1集成JSTL,使用其EL进行数据绑定,功能相对...

    深入struts1核心思想.doc

    综上所述,Struts1的核心思想是通过XML配置实现应用的解耦,使用ActionServlet协调请求,ActionForm承载表单数据,Action处理业务逻辑,以及ActionForward控制页面流转。了解和掌握这些概念有助于理解和使用Struts1...

    struts标签学习与应用(手册)

    Struts是一个开源的JavaEE框架,它主要用于构建和维护可扩展、易于维护的Web应用程序。在Struts中,标签库是其MVC设计模式的重要组成部分,它们提供了在JSP页面中简便、直观的方式来操作和展示数据。Struts1.2标签库...

    Struts之进阶篇.pdf

    从Struts 1.1版本开始,ActionForm类支持Map属性。这种设计允许开发者在ActionForm中混合使用Map和常规JavaBean属性,从而提高了灵活性。通过Map,开发者可以在不预先定义特定属性的情况下捕获HTTP请求参数。这意味...

    struts1+ibatis+Spring demo

    这个"struts1+ibatis+Spring demo"是一个示例项目,展示了如何将这三个框架集成到一起,实现一个完整的Web应用。 Struts1是Apache组织开发的一个开源MVC框架,它主要负责控制应用程序的流程,通过Action类处理用户...

Global site tag (gtag.js) - Google Analytics