Struts Series(4) - 日期类型转换
来源:互联网 发布:淘宝手机发票怎么开 编辑:程序博客网 时间:2024/04/30 04:01
Struts请求数据自动封装
JSP表单数据填充到action中的属性
实现原理:参数拦截器
register.jsp
:
<form action="${pageContext.request.contextPath }/user_register.action" method="post"> 用户名<input type="text" name="name"><br> 密码<input type="password" name="pwd"><br> 年龄<input type="text" name="age"><br> 生日<input type="text" name="birth"><br> <input type="submit" value="注册"><br> </form>
UserAction.java
:
public class UserAction { // 封装请求数据 private String name; private String pwd; private int age; private Date birth; // 必须给set get可以不给 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(name); System.out.println(pwd); System.out.println(age); System.out.println(birth); return "success"; }}
如果把它封装成User类,则Struts2在读取的时候回出现问题。
解决办法:给对象加get方法。
故最好是全部加上get和set方法。
类型转换
在Struts中,JSP提交的数据,Struts会自动转换为Action中属性的类型。对于基本数据类型以及日期类型会制动转换,日期类型只支持yyyy-MM-dd格式,否则会抛异常。
需要自己定义类型转换器。
局部类型转换器类
Struts转换器API:
1. |–TypeConverter 转换器接口
2. |–DefaultTypeConverter 默认类型转换器类
3. |–StrutsTypeConverter 用户自己写的转换类 继承此类即可
转换器开发步骤:
1. 写转换器类
2. 配置转换器类(告诉Struts自己的转换器类)
在同包的acion目录下新建一个properties文件,命名规则ActionClassName-conversion.properties
3. 内容 变量名.属性名称=转换器类全名
注意:转换器类没有同包限制,一般放在utils包中。
转换器类 MyConverter.java
:
import java.text.SimpleDateFormat;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class MyConverter extends StrutsTypeConverter{ /** * 把String转换为指定的类型【String To Date】 * @param context 当前上下文环境 * @param values jsp表单提交的字符串的值 * @param toClass 要转换为的目标类型 */ @Override public Object convertFromString(Map context, String[] values, Class toClass) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); return sdf.parse(values[0]); } catch (Exception e) { throw new RuntimeException(e); } } @Override public String convertToString(Map context, Object o) { return null; }}
转换器类配合props文件使用,为一个局部类型转换器。一个转换器不能给其他Action类使用。
全局类型转换器类
需要些一个转换器给所有的Action用。
配置全局类型转换器:
src/ xwork-conversion.properties
内容:
java.util.Date=转换器类全名
同时存在,优先使用局部转换器。
转换器类的写法
转换前需要判断
//判断:内容不能为空 if(values == null || values.length == 0){ return null; } //判断:类型必须为date if(Date.class != toClass){ return null; }
如果需要支持多种日期格式,需要对转换器进行修改。
修改后的转换器代码:
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import javax.xml.crypto.Data;import org.apache.struts2.util.StrutsTypeConverter;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 (Exception e) { continue; } } return null; } @Override public String convertToString(Map context, Object o) { return null; }}
- Struts Series(4) - 日期类型转换
- Struts类型转换(以日期为例)
- struts日期类型转换器
- struts日期类型转换器
- struts类型转换
- struts 类型转换
- struts 类型转换
- struts类型转换
- Struts类型转换
- struts validate 类型转换
- Struts类型转换
- struts集合类型转换
- 7.struts类型转换
- Struts 2.3 类型转换
- struts类型自动转换
- Struts类型转换实现
- Struts 2类型转换
- struts2日期类型转换
- PHP语言开发Paypal支付demo的具体实现
- 字体随浏览器缩放变化
- K-均值聚类算法
- 推荐三款强大的Js图表库
- js的单线程和异步
- Struts Series(4) - 日期类型转换
- 洛谷 2947 仰望Look Up(单调栈)
- 算法笔记之黑匣子问题(c++实现)
- 2012年奥巴马胜选演说
- Python 冒泡排序
- 异常处理:非法字符: '\ufeff'的解决方案
- Java.io.CharConversionException:EOF
- 学习Markdown
- linux高CPU进程