Struts2小结

 Struts2 类型转换

类型转换的意义

对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换

MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持.

表现层数据的处理

对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态。因此表现层的数据的流向主要有两个方向:输入数据和输出数据。

对于输入数据:则需要完成由字符串数据向多种类型数据的转化。程序通常无法自动完成,需要在代码中手动转化

对于输出数据:不管是java或是jsp都支持多种数据类型的直接输出。

表现层另外一个数据处理是:数据校验,分为客户校验和服务器端校验.后边会重点讲解

类型转换

HTTP参数都是字符串类型。 保存的数据可能是字符串、数字、布尔、日期时间等或者JavaBean类型。 手工的类型转换,比如将字符串转换为日期,通过: 通过request.getParameter方法获取字符串; 检查是否为空; 通过DateFormat.parse方法将字符串转换为Date对象

Struts2 的内置类型转换

Stringboolean 完成字符串与布尔值之间的转换

Stringchar  往常字符串与字符之间的转换

StringintInteger 完成字符串与整型之间的转换

StringLong 完成字符串与长整型值之间的转换

StringdoubleDouble 完成字符串与双精度浮点值的转换

StringFloat 完成字符串和单精度浮点之间的转换

StringDate 完成字符串和日期类型之间的转换,日期格式使用格式用户请求所在LocaleSHORT格式

String和数组 在默认的情况,数组元素是字符串,如果用户定义类型转换器,也可以是其它复合数据类型

StringMapList

下面进行实例,首先来看用ognl.DefaultTypeConverter 来实现的局部的类型转换

自定义的转换器 MyTypeConverter

public class MyTypeConverter extends DefaultTypeConverter {

 

       @Override

       public Object convertValue(Map context, Object value, Class toType) {

      

              System.out.println("类型转化器方法的......................start");

              //判断转化的方向

              if(toType == User.class){

                     //请求的参数是一个字符串的数组

                     String params[] = (String [])value;

                     //创建一个实例对象

                     User user = new User();

                     user.setName(params[0]);

                     user.setPass(params[1]);

                     user.setSal(Double.valueOf(params[2]));

                     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");

                    

                     try {

                            user.setBirth(dateFormat.parse(params[3]));

                     } catch (ParseException e) {

                            e.printStackTrace();

                     }

                     user.setIsmarry(Boolean.valueOf(params[4]));

                    

                     return user;

              }else if(toType == String.class){

                    

              }

             

              return super.convertValue(context, value, toType);

       }

 

      

}

然后我们创建一个properties文件名字为UserAction-conversion 并在其配置如下键值

user=cn.csdn.struts2.typeconverter.MyTypeConverter//键为你要转换的实体,值为你对应的转换器,这连文件必须要和上面的anction在同一路径下

 

第二种局部的类型转换方法,我们用struts2中自带的org.apache.struts2.util.StrutsTypeConverter进行配置

自定义转换器 MyDateTypeConverter 继承 org.apache.struts2.util.StrutsTypeConverter

 

public class MyDateTypeConverter extends StrutsTypeConverter {

 

       /** 用于String类型数据转成自定义类型的处理方法 */

       public Object convertFromString(Map context, String[] values, Class toClass) {

 

              System.out.println("struts2-----------------------start");

              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

 

              try {

                     Date date = dateFormat.parse(values[0]);

                     return date;

              } catch (ParseException e) {

                     System.out.println("你输入的日期格式有误.....");

                     e.printStackTrace();

              }

 

              return new Date();

 

       }

 

       /** 用于自定义类型转换成String */

       public String convertToString(Map context, Object obj) {

              System.out.println("struts2-----------------------end");

              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

             

              String str = dateFormat.format(obj);

             

              return str;

       }

 

}

在这之前我们要创建相应的user bean

public class User implements Serializable {

 

       /**

        *

        */

       private static final long serialVersionUID = 1L;

 

       private Integer id;

       private String name;

       private String pass;

       private Date birth;

       private Double sal;

       private Boolean ismarry;

 

       public User() {

              super();

              // TODO Auto-generated constructor stub

       }

      

      

 

       public User(Integer id, String name, String pass, Date birth, Double sal,

                     Boolean ismarry) {

              super();

              this.id = id;

              this.name = name;

              this.pass = pass;

              this.birth = birth;

              this.sal = sal;

              this.ismarry = ismarry;

       }

 

 

 

       public Integer getId() {

              return id;

       }

 

       public void setId(Integer id) {

              this.id = id;

       }

 

       public String getName() {

              return name;

       }

 

       public void setName(String name) {

              this.name = name;

       }

 

       public String getPass() {

              return pass;

       }

 

       public void setPass(String pass) {

              this.pass = pass;

       }

 

       public Date getBirth() {

              return birth;

       }

 

       public void setBirth(Date birth) {

              this.birth = birth;

       }

 

       public Double getSal() {

              return sal;

       }

 

       public void setSal(Double sal) {

              this.sal = sal;

       }

 

       public Boolean getIsmarry() {

              return ismarry;

       }

 

       public void setIsmarry(Boolean ismarry) {

              this.ismarry = ismarry;

       }

 

}

 

然后我们创建一个properties文件名字为User-conversion 并在其配置如下键值

birth=cn.csdn.struts2.typeconverter.MyDateTypeConverter//键为你要转化的字符串,值为你对应的转换器,这连文件必须要和上面的user bean在同一路径下

 

如果我们要定义全局的我们就要在class路径下创建一个xwork-conversion.properties的属性文件

cn.csdn.struts2.domain.User=cn.csdn.struts2.typeconverter.MyTypeConverter

java.util.Date=cn.csdn.struts2.typeconverter.MyDateTypeConverter

 

注册页面

<div align="center">

                     <h1>

                            用户注册页面

                     </h1>

                     <div>

                            <form action="./csdn/insert.action" method="post">

                                   用户名:

                                   <input type="text" name="user" />

                                   <br />

                                   密码:

                                   <input type="password" name="user" />

                                   <br />

                                   薪资:

                                   <input type="text" name="user" />

                                   <br />

                                   出生日期:

                                   <input type="text" name="user" />

                                   <br />

                                   婚否:

                                   <input type="radio" name="user" value="true"/>

                                  

                                   <input type="radio" name="user" value="false"/>

                                  

                                   <br/>

                   <input type="submit" value="注册"/>

                            </form>

                     </div>

              </div>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值