`
艳沐石
  • 浏览: 37238 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

struts2 向action提交list

阅读更多
1. 基本原理

在action里面定义
private List<String> list=new ArrayList<String>();
页面写上
<input type="text" name="list[0]"/>
<input type="text" name="list[1]"/>
<input type="text" name="list[2]"/>
那么提交过去就是3个元素的list了
如果list里面是自己的类
可以这样
private List<User> users;
在页面这样
<input type="text" name="users[0].name" value="aaa" /> 
<input type="text" name="users[1].name" value="bbb" />
就可以了。

注:这种方法存在一个问题,就是list的控制是手动控制的,如果为null就会引发异常。但是个是简单的示例,下面用iterator标签控制数据的加载,并为action获取数据做保证。

2. 实现方法

Struts2中支持使用List在页面和Action之间直接传递表格数据。下面是一个示例:
public class Person {
int id;
String name;
int age;
float height;
}

这是一个POJO,getter和setting省略了。

action中可以这样使用:
public class MyAction {
public List getPeopleList() { … }
public void setPeopleList( List peopleList ) { … }

}
在我们使用Person类之前,需要添加一个配置文件,MyAction-conversion.properties,把这个文件和MyAction放在一起。
这个文件里只有一行内容:
Element_peopleList=Person
前缀Element_是一个常量,表明等号左边的表达式中跟在这个常量后面的是Action类中一个List类型的字段名。
等号右边的表达式是全类名(包含package)
下面是一个页面的代码片段:
<s:form action="update" method="post" >
<s:iterator value="peopleList" status="stat">
<s:hidden
name="peopleList[%{#stat.index}].id"
value="%{peopleList[#stat.index].id}"/>
<s:textfield label="Name"
name="peopleList[%{#stat.index}].name"
value="%{peopleList[#stat.index].name}"/>
<s:textfield label="Age"
name="peopleList[%{#stat.index}].age"
value="%{peopleList[#stat.index].age}" />
<s:textfield label="Height"
name="peopleList[%{#stat.index}].height"
value="%{peopleList[#stat.index].height}"/>
<br/>
s:iterator>
<s:submit value="Update"/>
s:form>


使用这段代码,Struts2会创建一个Person类的ArrayList,并且用setPersonList这个方法把页面表格中的值传递回Action。
如果你是想从用户界面中动态创建列表值,需要允许Struts2给列表中类的实例。那么在配置文件MyAction-conversion.properties中添加一行:
CreateIfNull_peopleList = true




分享到:
评论
3 楼 buqulinghun 2015-11-10  
Struts2.1不需要配置文件MyAction-conversion.properties,加配置文件反而报ClassNotFound
2 楼 maxldwy 2014-08-22  
写了还是不行啊,能加下我QQ么690245422
1 楼 艳沐石 2011-04-15  
关于转换器(Conversion)

特定类型的转换器配置文件(局部转换):PointAction-conversion.properties,做法是:
在该Action类的包中添加一个格式为“类名-conversion.properties”的配置文件,并在其中加入“待
转换的属性的名字=转换器类的全名”对,即待转换类型的具体属性=转换器类的全名。
全局类型转换配置文件:xwork-conversion.properties(名称唯一,不可更改)
其下内容为“待转换属性的类的全名=转换器的全名”对

应用转换器的流程(个人 理解):
客户端把请求参数(a)传给struts2.0控制器FilterDispatcher,根据配置文件struts.xml相关配置
找到相关Action(b),流程转到该Action(b),生成该Action的一个实例(c)。该实例(c)根据JSP页面
的name属性(d)得到Action类(b)的相关属性(e)的值,通过该属性(e)的set方法进行赋值。但在对每一
个属性(e)赋值之前要检查该属性(e)有没有自定义的类型转化,如果没有,按照自己默认的行为进行类型转化。
如果有该属性(e)自定义好的类型转化,则根据xx-conversion.properties里的内容进行转化,
(“待转换的属性的名字=转换器类的全名”对)根据=号左面的值确定要转化的属性(或该属性所在的类)(e),
根据=号右面的值确定用哪一个转化类(f)来进行属性(e)的转化,此时流程跳转到该转化类(f)。在此类(f)中,
首先判断转化方向,如果是从客户端转化(String数组)到服务器端(对象),则进行相关步骤后返回一个对象(g)
给该Action(b),通过Action类(b)的待转化属性(e)的set方法,把转化类(f)返回的对象(g)赋值给该属性(e)。
至此,从客户端提交给Action的参数(a)完成了类型转化和赋值。接着执行Action(b)的主方法(默认的是execute()方法),
并返回一个字符串(String)。接着根据struts.xml ..<action>的<result/>的相关配置,转到相应的页面。
在该页面显示相应的内容:但在每显示一个属性时,从Action里调用get方法,得到相关属性的值并显示。但在输出相关属性值的时候,
要检查该页面属性有没有自定义的类型转化。发现有,流程转到转化类,执行数据从服务器端转化到客户端的方法,并返回一个字符串(String),
并直接赋值给该页面属性。

package class org.apache.struts2.util;
public abstract StrutsTypeConverter extends DefaultTypeConverter{}
整个类有public Object convertFromString(Map context, String[] values, Class toClass) 方法
和public String convertToString(Map context, Object o) 方法。
前者表示是客户端数据(String类型)转化为服务器端对象(Object对象)。
后者表示服务器端对象(Object对象)转化为客户端数据(String类型)。

相关推荐

    struts2 向action提交list.html

    struts2 向action提交list.html

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

    总结来说,Struts1.2处理包含列表对象的表单提交涉及到表单设计、ActionForm的创建、Action类的编写以及Struts框架的内部机制。通过理解这些知识点,开发者能够有效地管理用户输入的复杂数据结构,并在后端进行处理...

    struts2批量提交数据

    3. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要为批量提交的Action定义一个映射。 ```xml &lt;action name="batchSave" class="com.example.BatchSaveAction"&gt; &lt;result name="success"&gt;/success...

    Struts2_Action学习笔记、通配符{1},{2}

    ### Struts2_Action 学习笔记与通配符配置详解 #### 一、Struts2简介及简单配置 Struts2是一个基于Java EE平台的开源Web应用框架,它继承了Struts1的优点,并在此基础上进行了大量的改进。Struts2的核心功能之一是...

    使用Struts2的JSON插件来实现JSON数据传递

    启用插件后,你可以定义一个Struts2的动作(Action),并声明返回类型为`json`。例如: ```java public class MyAction extends ActionSupport { private String message; // Getters and Setters @Override ...

    struts2传递map list set到action

    struts2传递map list set到action

    AJAX和struts2传递JSON数组

    总结来说,通过这种方式,我们可以利用AJAX向Struts2 Action传递JSON数组,实现异步数据交互。这在动态更新页面内容、处理表单提交等场景下非常有用。同时,使用JSON作为数据交换格式,使得前后端的数据交换变得更加...

    struts2迭代 Map List

    在这个场景下,我们关注的是如何在Struts2中迭代Map和List对象。这两种数据结构在Web开发中经常被用到,特别是在展示表单数据或动态渲染页面元素时。 首先,让我们深入了解`struts2-taglib`,这是一个包含Struts2...

    struts2中action接收参数的方式

    在Struts2框架中,Action类是业务逻辑处理的核心组件,它负责接收用户请求并进行相应的处理。Action类中的方法通常对应着用户界面的各个操作,而这些方法的参数则是用来接收前端请求传递的数据。本篇文章将深入探讨...

    Struts2+ajax+json返回list.docx

    这样,当Action执行完成后,Struts2会自动将Action中的属性序列化为JSON格式并返回给客户端。配置如下: ```xml &lt;!-- 配置Struts2支持JSON --&gt; &lt;constant name="struts.enable.SMD" value="true"/&gt; ...

    Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)

    当表单提交后,Struts2会自动将这些数据封装到Action的相应属性中。在Action类中,你需要声明对应的集合属性,并设置getter和setter方法。例如: ```java private List&lt;String&gt; list; private Set&lt;String&gt; set;...

    struts2对于checkboxlist的换行

    `checkboxlist`在Struts2中通常与一个Action类中的属性关联,用于收集用户的多选数据。在HTML中,复选框默认是按行显示的,但为了优化用户界面,我们可能希望将它们分成多列显示,这就涉及到了换行。 `...

    jquery的ajax传json对象数组到struts2的action

    本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action,并在后端进行处理。 首先,我们了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    struts2标签使用例子

    - 配置Struts2的配置文件(struts.xml或struts.properties),定义Action和结果。 通过以上介绍,我们可以看出Struts2标签库为Web开发带来了很多便利。在实际项目中,开发者可以根据需要选择合适的标签来构建用户...

    提交多行数据到Struts的ActionForm的List属性中

    它继承自org.apache.struts.action.ActionForm接口,并包含多个字段来存储表单中的数据。当用户提交表单时,Struts框架会自动将表单数据填充到ActionForm实例中。 为了提交多行数据,我们通常会在HTML页面中使用多...

    struts2分页代码的示例

    下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...

    Struts2案例翻译篇-Using Struts2 Tag

    Struts2是一个强大的Java web框架,它提供了丰富的功能来构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,Tag库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更方便地创建动态网页。本篇将...

    struts2+ajaxForm

    1. **Struts2框架**:Struts2的核心是Action,它负责处理用户的请求,并通过Result将处理结果返回给客户端。Struts2提供了一套完整的生命周期管理,包括Action的创建、执行和销毁,以及结果的渲染。其配置文件...

    struts2实例 学生信息管理系统

    struts2实现的学生信息管理系统 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    Struts2实例 国际化 类型转换 struts标签

    类型转换(Type Conversion)是Struts2的一项重要特性,它能自动将请求参数转换为Action属性的预期类型。例如,用户输入的字符串可以自动转换为整数或日期。如果Struts2内置的转换器无法满足需求,开发者还可以...

Global site tag (gtag.js) - Google Analytics