Struts2框架怎样在Ajax请求中接收数组或List集合参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2框架怎样在Ajax请求中接收数组或List集合参数相关的知识,希望对你有一定的参考价值。
具体实现方式应该是:// 假设有参数数组
var userIds = [100 ,101 ,102 ,103 ,104] ;
// 将其转换为Object类型
var params = ;
var index = 0 ;
for(var n in userIds)
params[index ++] = n ;
// Action接收代码
private List<Long> userIds ;
public void setUserIds(List<Long> userIds)
this.userIds = userIds ;
参考技术A js里面用post方法传递参数,定义js数组,传参数是就直接传就可以了
例,我用的jquery
var str='aaa';
var exp = new Array();
exp.push(val1);
exp.push(val2);
$post('getpostdata.php',
expdata: exp, strdata:str,
function successget(data)
//call back
,
"json");
然后后台如果是php里就是 $data = $_REQUEST["expdata"];
$val1 = $data[0];
$val2 = $data[1];
$str = $_REQUEST["strdata"];
Struts2框架封装数据(接收页面参数)
主要解决的问题:是在action中如果获取请求参数
Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中。该工作主要是由Parameters拦截器做的。而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作。
通过简单的登录案例驱动式来进行分析:
需求分析
1.属性驱动
a.在action中定义属性,属性名称必须与页面标签中name属性名称一致;然后,为定义的属性提供get/set方法。简单说,直接在action类中提供与请求参数匹配属性,提供get/set方法。
(1)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>属性驱动模式接受页面参数</title> </head> <body> <form action="${pageContext.request.contextPath}/login" method="post"> 用户:<input type="text" name="username" /><br/> 密码:<input type="password" name="password" /><br/> <input type="submit" value="提交"/> </form> </body> </html>
(2)Action类代码
package cn.struts.demo_show; public class LoginAction { // 属性名称必须和页面参数名称一致 private String username; private String password; // 为所有属性提set/get方法 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } // 测试接受页面参数的方法 public void login() { System.out.println("action执行了"); System.out.println("页面输入用户名为:" + username + "页面输入密码为:" + password); } }
(3) struts.xml配置
(4)执行结果
此外,属性驱动还可以,通过javabean的方式获取页面参数。
在action类中创始一个javaBean,对其提供get/set ; 在action类中定义javabean对象的属性,同时创建该对象的set/get方法;在请求时页面上要进行修改,例如 user.username user.password ,要使用ognl表达式。
(1)封装模型对象:将页面参数封装到一个模型对象中。
(2)Action中定义模型对象的属性,并提供get/set方法。
以上两种方式的优缺点:
第一种比较简单,在实际操作我们需要将action的属性在赋值给模型(javaBean) 去操作
第二种:不需要在直接将值给javaBean过程,因为直接将数据封装到了javaBean 中。它要求在页面上必须使用ognl表达式,就存在页面不通用问题。
2.模型驱动(推荐)
实现步骤:
1.创建页面参数的javabean实体对象
2.让Action类要实现一个指定接口ModelDriven<T>
3.实例化模型对象(就是要new出来javaBean)
4.重写getModel方法(接口中的方法)将实例化的模型对象返回。
对于模型驱动它与属性驱动对比,在实际开发中使用比较多,模型驱动缺点,它只能对一个模型对象数据进行封装。
案列演示:
(1)前段页面使用之前的演示页面
(2)页面参数的封装
package cn.struts.demo_show;
public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(3)Action中,类实现ModelDriven<T>
package cn.struts.demo_show; import com.opensymphony.xwork2.ModelDriven; //1.action类实现ModelDriven接口 public class LoginAction implements ModelDriven<User> { // 2.实例化模型对象 private User user = new User(); // 3.重写接口中getModel方法,并返回模型对象 @Override public User getModel() { return user; } // 测试接受页面参数的方法 public void login() { System.out.println("action执行了"); System.out.println("页面输入用户名为:" + user.getUsername() + "页面输入密码为:" + user.getPassword()); } }
总结:
在实际的开发应用中,一般使用模型驱动方式较多。简单说,使用模型驱动,整个执行流程更清晰;其次在代码更简单,阅读性更高。其次,也会使用属性驱动模式,来实现简单的页面参数的接受。
通常情况下,如果页面表单的name属性和实体类中的属性名称不是一一对应的话,那么就应该使用属性驱动;相反,如果与之对应,那么可以使用模型驱动。
以上是关于Struts2框架怎样在Ajax请求中接收数组或List集合参数的主要内容,如果未能解决你的问题,请参考以下文章