struts2前台传递List、Set、Map集合数据到后台

对应数据在前台与后天中的交互,struts2框架替我们做了很大部分的数据封装工作,这里就关于一些常见类型数据传递的格式和配置注意事项做简单的记录。

主要有简单类,List集合,Set集合,Map集合数据的在前台与后天间的传递与展示

package com.supre.idisk.model;
 
import java.io.Serializable;
 
public class Student {
 
	private int stuId;
	private String stuNo;
	private String stuName;
	private String stuAge;
	public Student(int stuId, String stuNo, String stuName, String stuAge) {
		super();
		this.stuId = stuId;
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.stuAge = stuAge;
	}
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public int getStuId() {
		return stuId;
	}
	public void setStuId(int stuId) {
		this.stuId = stuId;
	}
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public String getStuAge() {
		return stuAge;
	}
	public void setStuAge(String stuAge) {
		this.stuAge = stuAge;
	}
	@Override
	public String toString() {
		return "Student [stuId=" + stuId + ", stuNo=" + stuNo + ", stuName="
				+ stuName + ", stuAge=" + stuAge + "]";
	}
	
}

为了测试方便就将各种形式数据放在了一起

前台录入数据的jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<h3>简单对象</h3>
<form method="post" action="user_addStudent">
编号:<input type="text" name="student.stuNo" /><br/>
姓名:<input type="text" name="student.stuName" /><br/>
年龄:<input type="text" name="student.stuAge" /><br/>
<input type="submit" value="提交" />
</form>
<hr>
<h3>List集合</h3>
<form method="post" action="user_addStuList">
学生1 
编号:<input type="text" name="stuList[0].stuNo" />
姓名:<input type="text" name="stuList[0].stuName" />
年龄:<input type="text" name="stuList[0].stuAge" /><br/>
学生2 
编号:<input type="text" name="stuList[1].stuNo" />
姓名:<input type="text" name="stuList[1].stuName" />
年龄:<input type="text" name="stuList[1].stuAge" /><br/>
学生3 
编号:<input type="text" name="stuList[2].stuNo" />
姓名:<input type="text" name="stuList[2].stuName" />
年龄:<input type="text" name="stuList[2].stuAge" /><br/>
<input type="submit" value="提交" />
</form>
<hr>
<h3>Set集合</h3>
<form method="post" action="user_addStuSet">
学生1 
编号:<input type="text" name="stuSet.makeNew[0].stuNo" />
姓名:<input type="text" name="stuSet.makeNew[0].stuName" />
年龄:<input type="text" name="stuSet.makeNew[0].stuAge" /><br/>
学生2 
编号:<input type="text" name="stuSet.makeNew[1].stuNo" />
姓名:<input type="text" name="stuSet.makeNew[1].stuName" />
年龄:<input type="text" name="stuSet.makeNew[1].stuAge" /><br/>
学生3 
编号:<input type="text" name="stuSet.makeNew[2].stuNo" />
姓名:<input type="text" name="stuSet.makeNew[2].stuName" />
年龄:<input type="text" name="stuSet.makeNew[2].stuAge" /><br/>
<input type="submit" value="提交" />
</form>
<hr>
 
<h3>Map集合</h3>
<form method="post" action="user_addStuMap">
学生1 
编号:<input type="text" name="stuMap['stu1'].stuNo" />
姓名:<input type="text" name="stuMap['stu1'].stuName" />
年龄:<input type="text" name="stuMap['stu1'].stuAge" /><br/>
学生2 
编号:<input type="text" name="stuMap.stu2.stuNo" />
姓名:<input type="text" name="stuMap.stu2.stuName" />
年龄:<input type="text" name="stuMap.stu2.stuAge" /><br/>
学生3 
编号:<input type="text" name="stuMap['stu3'].stuNo" />
姓名:<input type="text" name="stuMap['stu3'].stuName" />
年龄:<input type="text" name="stuMap['stu3'].stuAge" /><br/>
<input type="submit" value="提交" />
</form>
<hr>
</body>
</html>

说明:主要是name属性的书写格式

1.简单类直接使用‘变量名.属性’的形式

2. List集合使用‘变量名[索引].属性’的形式

3. Set集合比较特殊,必须使用到OGNL中makeNew的运算符来表示

       格式:‘变量名.makeNew[索引].属性’

4.Map集合使用的是‘变量名.key名.属性’ 也可以是‘变量名['key'].属性’

    这里key使用是String类型,上面两种形式都可以,其他类型的key就需要自己亲测了
后台接收数据的Action类代码:
 

package com.supre.idisk.action;
 
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.Element;
import com.opensymphony.xwork2.util.Key;
import com.opensymphony.xwork2.util.KeyProperty;
import com.supre.idisk.model.Student;
 
public class UserAction extends ActionSupport {
	
	private Student student;
    @Element(Student.class)
	private List<Student> stuList;
	@KeyProperty("stuId")  //Student中的标识字段,该字段需要get方法,该配置不可少
	@Element(Student.class)  
	private Set<Student> stuSet = new HashSet<>();
	@Key(String.class)
	@Element(Student.class)
	private Map<String, Student> stuMap = new HashMap<>();
	
	public String addStudent(){
		System.out.println("-------简单对象");
		System.out.println(student);
		return SUCCESS;
	}
	
	public String addStuList(){
		System.out.println("-------List集合");
		for (Student stu : stuList) {
			System.out.println(stu);
		}
		return SUCCESS;
	}
	
	public String addStuSet(){
		System.out.println("-------Set集合");
		System.out.println(stuSet);
		for (Student stu : stuSet) {
			System.out.println(stu);
		}
		return SUCCESS;
	}	
	
	public String addStuMap(){
		System.out.println("-------Map集合");
		for (String key : stuMap.keySet()) {
			System.out.println(key + "----" + stuMap.get(key));
		}
		return SUCCESS;
	}
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	public List<Student> getStuList() {
		return stuList;
	}
	public void setStuList(List<Student> stuList) {
		this.stuList = stuList;
	}
	public Set<Student> getStuSet() {
		return stuSet;
	}
	public void setStuSet(Set<Student> stuSet) {
		this.stuSet = stuSet;
	}
	public Map<String, Student> getStuMap() {
		return stuMap;
	}
	public void setStuMap(Map<String, Student> stuMap) {
		this.stuMap = stuMap;
	}
	
	
}

注意:

1.其中的变量必须提供标准的get和set方法

2.Set集合和Map集合必须初始化,即在定义的时候就赋上对象

3. Set集合上的KeyProperty注解必须配上,其他注解配置均可以省略。

4.这里的配置也可以使用配置文件实现,想了解的可以搜索:struts2类型转换配置
前台对相关数据的展示jsp代码!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
<!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>Insert title here</title>
</head>
<body>
<h3>简单对象</h3>
编号:${student.stuNo}<br/>
姓名:${student.stuName}<br/>
年龄:${student.stuAge}<br/>
<hr>
<h3>List集合</h3>
<s:iterator value="stuList" var="bean" status="state">
	学生${state.index+1}:
	编号:${bean.stuNo}
	姓名:${bean.stuName}
	年龄:${bean.stuAge}<br/>
</s:iterator>
<hr>
<h3>Set集合</h3>
<s:iterator value="stuSet" var="bean" status="state">
	学生${state.index+1}:
	编号:${bean.stuNo}
	姓名:${bean.stuName}
	年龄:${bean.stuAge}<br/>
</s:iterator>
<hr>
<h3>Map集合</h3>
<s:iterator value="stuMap" var="bean" status="state">
	学生${bean.key}:
	编号:${bean.value.stuNo}
	姓名:${bean.value.stuName}
	年龄:${bean.value.stuAge}<br/>
</s:iterator>
<hr>
</body>
</html>

说明:关于展示主要还是使用el表达式,这里Map的展示是需要使用到'key'和'value'
总结:

List集合和Map集合传到后台比较简单,只需要提供get和set方法,同时Map初始化,在前台jsp中安指定格式传递,后台就能收到数据。

Set比较特殊

1先前台jsp必须使用makeNew,即格式‘变量名.makeNew[索引].属性’

2 后台set必须配置@KeyProperty,同时需要提供get和set方法,以及初始化

 

Set集合注意:这里如果属性中是一个对象,即采用‘变量名.makeNew[索引].属性.属性’的形式传递数据的时候,在后台接到Set集合中的数据都一样的。

例如:假如Student中有一个属性为Group对象

使用

<input type='text'name='stuSet.makeNew[0].group.groupId'> //这里输入 1
<input type='text'name='stuSet.makeNew[1].group.groupId'>   //这里输入2
<input type='text'name='stuSet.makeNew[2].group.groupId'>   //这里输入3

假如后台遍历打印groupId即

for (Student stu : stuList) {
   System.out.println(stu.group.groupId);
}

时,发现打印的数据全部一样的。

这个初步估计应该是跟Set集合的特性有关,暂时未去深究原因以及解决办法,后续中再抽时间去探讨这个现象

补充:

         如果后台用Map<String,Object>map接前台的数据,前台还是以map.key的形式传值,则后台拿到的数据中,map.get(key)取到的数据为String[]类型,可以通过debug查看,则值前台传递来的值会按前台map.key的存放在map.get(key)中。当然后台如果还是Map<String String> 接值的话就不存在String[],如果前台出现同名,也只会以“, ”拼接在一起放入value中。

例如

前台有:这里其他标签就加上了

<input type="text" name="map.userNo" value="admin">
<input type="text" name="map.userNo" value="zhangsan">
<input type="text" name="map.userNo" value="lisi">
<input type="text" name="map.userName" value="管理员">

(1)后台:Map<String,Object>map接值

Set<String> keys=map.keySet()
for(String key:keys){
	//String  value =  (String) map.get(key);  会报错
	String[]  value =  (String[]) map.get(key);
	System.out.println("key:"+key);
	for(String val:value){
	System.out.println("value:"+val);
	}
}

打印结果:

key:userNo
value:admin
value:zhangsan

value:lisi
key:userName
value:管理员

(2)后台:Map<String,String>map接值

Set<String> keys=map.keySet()
for(String key:keys){
	String value = map.get(key);  		
	System.out.println("key:"+key);
	System.out.println("value:"+value);
}

打印结果:

key:userNo
value:admin, zhangsan, lisi

key:userName
value:管理员

 

转载于:https://my.oschina.net/u/2331760/blog/3075884

Python海康相机api---超简单入坑学习必看 海康官网下载相机驱动​安装好以后找到Python的开发文件目录参考:D:\MVS\MVS\Development\Samples\Python\MvImport这几个文件很重要,想调用海康相机取图会用到.​为了写代码方便可以把这几个文件拷贝一下,跟你的api主文件放在同一个文件夹下可以减少80%的烦恼.​。 阅读详情

相关推荐

【考研复试】西安电子科技大学上机题

【考研复试】西安电子科技大学上机题

全网粉丝30W+,CSDN、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1704

struts2 中 关于对象数组的传值

大家用struts2时想必会经常遇到在JS或者JSP中往后台传递对象数据的问题,你是不是在一直为后台取值是null的问题而苦恼呢?下边我来告诉大家究竟如何做才能取到值。         在Action中声明数据对象(这里也可以是List集合),代码如下: public List users = new ArrayList(); 这里有两点需要注意: 1、声明可以是public也可以是private...

枫飘瞬间 6195

架构师成长之路(1)--什么是架构师

前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做), 执行/行动找准自己定位:我是谁?在哪里...

黄规速博客:学如逆水行舟,不进则退 6万+

怎么从前台传一个list后台

现在需要从前台传一个list后台,以为就像之前传参数那样,结果出了点问题,后来查资料发现可以这样做:将list集合转化为json格式,这样就成了一串字符串了,然后就可以传到后台了,在后天就可以用String来接收,具体代码如下:前端部分代码如下:var list=JSON.stringify(sublist); $.ajax({ type:"post", url:"&lt;...

TOMA1B2C3的博客 2万+

Http 前端向后端传递List参数

在日常项目开发中,前端向后端传参时,可能会遇到需要传类型的参数。比如批量删除时将多个 ID 以集合的形式传给后台

天河有尽后为涯,星海无边前作岸。 9574

struts2如何接受非基本类型对象数组集合

struts2接受非基本类型对象数组集合

qq_36804605的博客 717

关于去除list的中括号以及string装换为list三种方法

去除list的中括号

ityw520的博客 4145

009--Struts2数据封装(属性模型驱动)及List Map Set集合数据封装

属性驱动 通过属性的set方法 编写jsp表单页面 编写Action 配置struts.xml文件 验证结果 页面提供表达式方式 编写JavaBean文件 编写Action类,接收数据 配置struts.xml 编写JSP文件 验证结果 模型驱动 编写Action类 配置struts.xml 编写JSP 验证结果 Struts2中封装集合类型数据 封装到List集合中...

小洋人最happy的专栏 983

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

[size=medium][b][color=red]---------------List-----------------[/color][/b][/size] 1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action 2.使用Struts标签,实现多个用户同时注册(注意属性配置文件) 3.pojo [code="java"] packa...

路虽远行则将至,事虽难做则必成 234

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

---------------List----------------- 1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action 2.使用Struts标签,实现多个用户同时注册(注意属性配置文件) 3.pojo package com.sh.pojo; import java.util.Date; public class Registe

路虽远行则将至,事虽难做则必成 980

Struts2封装集合类型的数据

Struts2封装集合类型的数据 在实际开发中,有些时候我们需要批量的插入用户或者批量的插入其他对象,在Action中需要接受到这多个Action中封装的对象,然后传递给业务层,那么这个时候就需要将表单的数据封装到集合中,一般使用的集合List或者是Map 封装到List集合中 编写前端form表单 &lt;body&gt; &lt;form action="${page...

qq_42780864的博客 366

struts2 传递数组ListMap

jsp文件   数组:     &lt;s:textfield name="ages" value="a1"&gt;&lt;/s:textfield&gt;     &lt;s:textfield name="ages" value="a2"&gt;&lt;/s:textfield&gt;     &lt;s:textfield name="a

zz_xyz的博客 312

通过ajax将数组list集合传到后台的方法

一、传数组 前端js: $(document).on('click', '#sendArr', function () { var ids = []; for(var i=0; i<10; i++){ ids.push(i); } $.ajax({ type: 'post', dataType: 'json', url: '/test/test/sendArr', data: {ids:ids}, traditional: true, success: functi

XU_RI_DONG_SHENG的博客 1189

关于前端将一个集合传递到后端

关于前端将一个集合传递到后端

qq_57731353的博客 5980

前端常见问题以及处理方式 - - - (八) ES6中的setmapset篇)

了解ES6中的setmap各自的作用区别

业余丰富各种技术栈 1万+

前台list<实体类>到后台(springMVC)

前台js //存放表格数据 var indicatedList = new Array(); //定义前台实体类 function indicatedObj(param1, param2) { //参数1 this.param1= param1; //参数2 this.param2= param2; } //生成指示书 fu

weixin_44084713的博客 647

ajax 入参为list_ajax传递后台数组参数方式

出自:http://blog.csdn.net/lingxyd_0/article/details/10428785在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用到了批量更改数据状态功能。在前台可以获取每条数据的ID,但是如何通过数组方式传递后台?通过昨晚的各种方式的调试,终于得出了答案! 在此作为备忘。目前有两种方式可行:方式一前台代码:// 方式一var ...

weixin_39588419的博客 1372

FBX转Bip亲测可用

FBX转Bip亲测可用(内附安装与使用方法),便宜又好用只是蒙皮我还没有搞定,有知道咋办的可以给我留言

DSSS_matlab-master_扩频窄带干扰_窄带干扰_扩频窄带_dsss_

MATLAB实现基于扩频通信系统的抗窄带干扰

上一篇: linux碰到的一些命令
下一篇: mysql 让别人连接我的数据库
chetui2456
博客等级 码龄9年 4粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值