struts中数据处理
来源:互联网 发布:js 工作流设计器 编辑:程序博客网 时间:2024/06/05 23:44
数据处理方式
把数据保存到域中
方式1 直接获取Servlet api 核心类: ServletActionContext
//方式1: 直接拿到ServletApi, 执行操作HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession();ServletContext application = ServletActionContext.getServletContext();// 操作request.setAttribute("request_data", "request_data1");session.setAttribute("session_data", "session_data1");application.setAttribute("application_data", "application_data1");
方式2 通过ActionContext获取不同(代表request、session、application)的map
// 【推荐:解耦的方式实现对数据的操作】// Struts中对数据操作,方式2: 通过ActionContext类 ActionContext ac = ActionContext.getContext();// 得到Struts对HttpServletRequest对象进行了封装,封装为一个map// 拿到表示request对象的mapMap<String,Object> request = ac.getContextMap(); // 拿到表示session对象的mapMap<String, Object> session = ac.getSession();// 拿到表示servletContext对象的mapMap<String, Object> application = ac.getApplication();
方式3 实现接口的方法: RequestAware/SessionAware/ApplicationAware
/** * 数据处理, 方式3: 实现接口的方法 */public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{ private Map<String, Object> request; private Map<String, Object> session; private Map<String, Object> application; // struts运行时候,会把代表request的map对象注入 @Override public void setRequest(Map<String, Object> request) { this.request = request; } // 注入session @Override public void setSession(Map<String, Object> session) { this.session = session; } // 注入application @Override public void setApplication(Map<String, Object> application) { this.application = application; } @Override public String execute() throws Exception { // 数据 request.put("request_data", "request_data1_actionAware"); session.put("session_data", "session_data1_actionAware"); application.put("application_data", "application_data1_actionAware");// return SUCCESS; }}
请求数据自动封装
方式1
jsp表单数据填充到action中的属性
register.jsp:
<body> <form action="${pageContext.request.contextPath }/user_register.action" method="post"> 用户名:<input type="text" name="name"><br/> 密码:<input type="text" name="pwd"><br/> 年龄:<input type="text" name="age"><br/> 生日:<input type="text" name="birth"><br/> <input type="submit" value="注册"> </form> </body>
UserAction:
/** * Struts核心业务: 请求数据自动封装以及类型转换 */public class UserAction { // 封装请求数据 private String name; // 必须给set / get可以不用给 private String pwd; private int age; private Date birth; public void setName(String name) { this.name = name; } public void setPwd(String pwd) { this.pwd = pwd; } public void setAge(int age) { this.age = age; } public void setBirth(Date birth) { this.birth = birth; } // 处理注册请求 public String register() { System.out.println(user.getName()); System.out.println(user.getPwd()); System.out.println(user.getAge()); System.out.println(user.getBirth()); return "success"; }}
方式2
jsp表单数据填充到action的对象中的属性
register.jsp:
<body> <form action="${pageContext.request.contextPath }/user_register.action" method="post"> 用户名:<input type="text" name="user.name"><br/> 密码:<input type="text" name="user.pwd"><br/> 年龄:<input type="text" name="user.age"><br/> 生日:<input type="text" name="user.birth"><br/> <input type="submit" value="注册"> </form> </body>
User、UserAction:
public class User { // 封装请求数据 private String name; // 必须给set / get可以不用给 private String pwd; private int age; private Date birth; public void setName(String name) { this.name = name; } public void setPwd(String pwd) { this.pwd = pwd; } public void setAge(int age) { this.age = age; } public void setBirth(Date birth) { this.birth = birth; } public String getName() { return name; } public String getPwd() { return pwd; } public int getAge() { return age; } public Date getBirth() { return birth; }}
/** * Struts核心业务: 请求数据自动封装以及类型转换 */public class UserAction { // 对象类型,一定给get方法 private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } // 处理注册请求 public String register() { System.out.println(user.getName()); System.out.println(user.getPwd()); System.out.println(user.getAge()); System.out.println(user.getBirth()); return "success"; }}
类型转换
struts中jsp提交的数据,struts会自动转换为action中属性的类型;对于基本数据类型以及日期类型会自动转换;日期类型支持yyyy-MM-dd格式如果是其他格式,需要自定义类型转换器: 局部类型转换器 全局类型转换器struts转换器API|-- TypeConverter 转换器接口 |-- DefaultTypeConverter 默认类型转换器类 |-- StrutsTypeConverter 用户编写的转换器类,继承此类即可
局部类型转换器
转换器开发步骤
1、自定义转换器继承StrutsTypeConverter 2、重写convertFromString和convertToString方法 3、注册转换器 3.1 在Action所在包中建立一个properties文件 命名规则: Action名-conversion.properties 举 例: UserAction-conversion.properties 3.2 在3.1文件中添加以下数据 需要转换的字段名=自定义转换器类的权限定名 user.birth=cn.itcast.d_type.MyConverter总结: 转换器能否给其他Action用? 不能,以上的转换器注册时候是与Action的名字相 耦合的,因此只能在自己的Action中内部使用
全局类型转换器
实现的接口和继承的类都是相同的,本质上就是配置的方式不同。
开发步骤
1、自定义转换器继承StrutsTypeConverter 2、重写convertFromString和convertToString方法 3、注册转换器 3.1 在项目src目录下建立以下固定文件 xwork-conversion.properties 3.2 在3.1文件中添加以下数据 需要转换的类类型=转换器类的权限定名 如: java.util.Date= cn.itcast.converter.DateConverter
自定义的类型转换器类
/** * 自定义类型转换器类 */public class MyConverter extends StrutsTypeConverter { // 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日.. // 先定义项目中支持的转换的格式 DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy年MM月dd日") }; /** * 把String转换为指定的类型 【String To Date】 * * @param context * 当前上下文环境 * @param values * jsp表单提交的字符串的值 * @param toClass * 要转换为的目标类型 */ @Override public Object convertFromString(Map context, String[] values, Class toClass) { // 判断: 内容不能为空 if (values == null || values.length == 0) { return null; } // 判断类型必须为Date if (Date.class != toClass) { return null; } // 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回 for (int i=0; i<df.length; i++) { try { return df[i].parse(values[0]); } catch (ParseException e) { continue; } } return null; } @Override public String convertToString(Map context, Object o) { return null; }}
0 0
- struts中数据处理
- struts中数据处理的几种方式
- Struts 数据处理
- Struts 1 中“日期类型”的表单数据处理
- Struts的数据处理方式
- Struts的数据处理方式
- Struts Series(3) - Struts数据处理方式
- 使用 Struts 2 进行动态数据处理
- SSH框架之Struts的数据处理
- Struts数据处理(获取request对象)
- 数据处理-不断完善中......
- Oracle中大数据处理
- 单片机中AD数据处理
- ArcMap中数据处理步骤
- iOS中位图数据处理
- Android中JSON数据处理
- sql中date数据处理
- MapReduce中数据处理详解
- POJ 2104 K-th Number (主席树 静态区间第K大)
- CentOS下搭建samba服务器与Windows进行共享服务
- UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图
- perl正则表达式(一)
- 【C++】:STL迭代器使用详解,很好很详细
- struts中数据处理
- 57-003-1 bootstrap附加导航Affix实现页面的滚动监听
- 时间格式化输出
- 数据库增删改查之增
- 涛哥的Cocos2d-js教程 之一 js绑定 读取csb文件
- Android 项目框架 使用MVP开发
- 关于联合体
- haroxy hdr
- Eclipse exits automatically exit code 127