Struts2中数据封装方式
一、通过ActionContext类获取
public class ActionContextDemo extends ActionSupport {
@Override
public String execute() throws Exception {
//获取ActionContext对象
ActionContext context = ActionContext.getContext();
//调用getParameters对象获取参数
Map<String, Object> map = context.getParameters();
//遍历打印map集合
for (String key : map.keySet()) {
String[] val = (String[]) map.get(key);
System.out.println(key + " : " + Arrays.toString(val));
}
return NONE;
}
}
二、通过ServletActionContext类获取request类然后获取
public class ServletActionContextDemo extends ActionSupport {
@Override
public String execute() throws Exception {
//获取request
HttpServletRequest request = ServletActionContext.getRequest();
//获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] hobbies = request.getParameterValues("hobbies");
System.out.println(username + " : " + password + " : " + Arrays.toString(hobbies));
//操作域对象
//request域
HttpServletRequest request2 = ServletActionContext.getRequest();
request2.setAttribute("request", "hello request");
//获取session域
HttpSession session = request2.getSession();
session.setAttribute("session", "hello session");
//获取servletcontext域
ServletContext servletContext = request2.getServletContext();
servletContext.setAttribute("servletContext", "application");
return SUCCESS;
}
}
三、属性封装
定义私有的成员变量,变量名称与表单中name属性值一致
提供成员变量的get和set方法(实际上,在数据封装时,仅提供set方法即可。成员变量的属性名也不一定非得跟name属性值一致,但set方法跟的字段setXXX中的XXX必须跟name属性名的首字符大写一致)
public class DataPackagingAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String[] hobbies;
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 String[] getHobbies() {
return hobbies;
}
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
@Override
public String execute() throws Exception {
System.out.println("属性驱动: " + username + " : " + password + " " + Arrays.toString(hobbies));
return NONE;
}
}
四、基于模型驱动的数据封装方法
1.让action类实现ModelDriven<T>接口
2.实现ModelDriven<T>接口中的getModel方法
3.在Action中创建私有的成员变量,并手动创建实体类
public class DataPackagingAction2 extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
五、复杂数据的封装方法
1.封装数据到list集合中
第一步: 在action中声明list成员变量,并手动创建实体类;
第二部: 提供get和set方法;
第三部: 在jsp页面中,提供基于list作为值得name属性
public class ListAction extends ActionSupport {
private List<User> list = new ArrayList<User>();
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
for (int i = 0; i < list.size(); i ++) {
System.out.println(list.get(i));
}
return NONE;
}
}
在jsp页面中name属性的赋值规则
<form action="${pageContext.request.contextPath}/list.action" method="post">
username: <input type="text" name="list[0].username" /><br/>
password: <input type="password" name="list[0].password" /><br/>
hobby: <input type="checkbox" name="list[0].hobbies" value="basketball" />basketball
<input type="checkbox" name="list[0].hobbies" value="football" />football
<input type="checkbox" name="list[0].hobbies" value="badminton" />badminton
<hr/>
username: <input type="text" name="list[1].username" /><br/>
password: <input type="password" name="list[1].password" /><br/>
hobby: <input type="checkbox" name="list[1].hobbies" value="basketball" />basketball
<input type="checkbox" name="list[1].hobbies" value="football" />football
<input type="checkbox" name="list[1].hobbies" value="badminton" />badminton
<hr/>
<input type="submit" value="提交" />
</form>
2.封装数据到map集合中
第一步: 在action中声明map成员变量,并手动创建实体类;
第二部: 提供get和set方法;
第三部: 在jsp页面中,提供基于map作为值得name属性
public class MapAction extends ActionSupport {
private Map<String, User> map = new HashMap<String, User>();
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
for (String key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
return NONE;
}
}
在jsp页面中name属性的命名规则
<form action="${pageContext.request.contextPath}/map.action" method="post">
username: <input type="text" name="map['one'].username" /><br/>
password: <input type="password" name="map['one'].password" /><br/>
hobby: <input type="checkbox" name="map['one'].hobbies" value="basketball" />basketball
<input type="checkbox" name="map['one'].hobbies" value="football" />football
<input type="checkbox" name="map['one'].hobbies" value="badminton" />badminton
<hr/>
username: <input type="text" name="map['two'].username" /><br/>
password: <input type="password" name="map['two'].password" /><br/>
hobby: <input type="checkbox" name="map['two'].hobbies" value="basketball" />basketball
<input type="checkbox" name="map['two'].hobbies" value="football" />football
<input type="checkbox" name="map['two'].hobbies" value="badminton" />badminton
<hr/>
<input type="submit" value="提交" />
</form>
3.使用属性封装数据到对象中
第一步: 在action中声明实体类User的成员变量,可以不用实例化
第二步: 提供实体类的get和set方法
第三部: jsp中name属性基于实体类赋值
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//声明实体类
private User user;
//生成get和set方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//数据打印
@Override
public String execute() throws Exception {
System.out.println("~~~~~~" + user);
return NONE;
}
}
jsp页面中name属性的命名规则
<form action="${pageContext.request.contextPath}/user.action" method="post">
username: <input type="text" name="user.username" /><br/>
password: <input type="password" name="user.password" /><br/>
hobby: <input type="checkbox" name="user.hobbies" value="basketball" />basketball
<input type="checkbox" name="user.hobbies" value="football" />football
<input type="checkbox" name="user.hobbies" value="badminton" />badminton
<hr/>
<input type="submit" value="提交" />
</form>
Struts2中数据封装方式的更多相关文章
- Struts2中数据封装机制
Struts2当中数据封装的三种机制:属性驱动.标签驱动.模型驱动.下面来一一介绍. 一.属性驱动 1.需要提供对应属性的set方法进行数据的封装. 2.表单的哪些属性需要封装数据,那么在对应的Act ...
- 十一 三种Struts2的数据封装方式,封装页面传递的数据
Struts2的数据封装:Struts2是一个web层框架,框架是软件的半成品.提供了数据封装的基本功能. 注:Struts2底层(核心过滤器里面的默认栈里面的拦截器,具体见struts-defaul ...
- Struts2中获取HttpServletRequest,HttpSession等的几种方式
转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...
- Struts2中访问web元素的四种方式
Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...
- Struts2 中的数据传输的几种方式
1. 如何将参数从界面传递到Action? 你可以把Struts2中的Action看做是Struts1的Action+ActionForm,即只需在Action中定义相关的属性(要有gette ...
- Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用
struts2中的Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="pos ...
- Struts2中获取Web元素request、session、application对象的四种方式
我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...
- struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?
struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的? 解答: 1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范set和get ...
- struts2中Action訪问servlet的两种方式
一.IoC方式 在struts2框架中,能够通过IoC方式将servlet对象注入到Action中.通常须要Action实现下面接口: a. ServletRequest ...
随机推荐
- VS2005的数据断点功能
多年前在VS2005强大的条件断点功能里面讨论过VS2005的条件断点功能. 其实在VS2005里面还有比较好用的(为什么我不用很牛逼呢?因为和OD比起来实在是太简陋了,但是使用上还是比较方便的)内存 ...
- FPGrowth 实现
在关联规则挖掘领域最经典的算法法是Apriori,其致命的缺点是需要多次扫描事务数据库.于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,韩嘉炜老师的FP-Tree算法就是其中非常高效 ...
- SpriteBuilder全屏弹出菜单的特殊效果
但是等一下!这里可以有更多.对于全屏的弹出菜单,你可以在显示弹出全屏菜单时朦胧化背景的level视图. 通过修改SpriteBuilder中的color节点的Color属性(比如修改为black)和O ...
- XMPP系列(四)---发送和接收文字消息,获取历史消息功能
今天开始做到最主要的功能发送和接收消息.获取本地历史数据. 先上到目前为止的效果图: 首先是要在XMPPFramework.h中引入数据存储模块: //聊天记录模块的导入 # ...
- Leetocde_290_Word Pattern
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/49717803 Given a pattern and a ...
- android EventBus详解(二)
上一节讲了EventBus的使用方法和实现的原理,下面说一下EventBus的Poster只对粘滞事件和invokeSubscriber()方法是怎么发送的. Subscribe流程 我们继续来看Ev ...
- 如何在os x或ubuntu下安装最新的ruby
os x下基本上可以安装到比较新的ruby,首先先安装rvm,然后用rvm list known看当前可供安装的ruby的版本,不过这也不是绝对的,比如在我的os x 10.9上,命令返回如下: # ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- Kubernetes如何支持有状态服务的部署?
作者:Jack47 转载请保留作者和原文出处 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. Kubernetes对无状态服务有完善的支持 ...
- angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...