`

struts2 自学笔记(3)之类型转换

阅读更多

 struts2提供了简单基本类型的自动转换,如 java 八种基本数据类型,以及 String Date 等简单数据类型。

我们将上个例子修改一下:

index .jsp中添加: 年龄: < input   type = "text"   name = "age" />< br />

    生日: < input   type = "text"   name = "birthday" />< br />

result .jsp中添加: 你的年龄:${requestScope.age} < br />

            你的生日是:${requestScope.birthday}

UserAction中添加两个属性: private  int age ;  private Date birthday ;并添加 get/set 方法。运行后输入相应信息结果页面显示:

你的用户名:lisi  
你的年龄:20
你的生日是:Sat Sep 08 00:00:00 CDT 1990

我们可以看到struts2已经将页面传过来的string类型经行了转换。

 

但是如果我们传入一个User类型的对象,struts2会不会帮我们转换的,肯定不会了,struts2怎么会知道User是个什么东西呢?当我们需要对复杂对象类型经行转换时就需要我们自己动手了。Struts2只会帮我做简单的事,复杂的事还是需要我们自己来做。

下面来看看一个复杂对象类型的转换该怎么做?(实例二)

  index.jsp:

< body >

   < h2 > 请用逗号分隔用户名和年龄 </ h2 >

   < form   action = "userAction" >

    用户: < input   type = "text"   name = "user" />

    < input   type = "submit"   value = "提交 "   />

   </ form >

   </ body >  

   result .jsp:

< body >

           < s:property   value = "user"   />

   </ body >

struts .xml:

< struts >

< package   name = "struts2_2"   extends = "struts-default" >

< action   name = "userAction"   class = "com.gufengxiachen.struts2_2.action.UserAction" >

< result   name = "success" > /result.jsp </ result >

</ action >

</ package >

</ struts >

UserAction.java:

 

package com.gufengxiachen.struts2_2.action;

import com.gufengxiachen.struts2_2.model.User;

import com.opensymphony.xwork2.ActionSupport;

 

public class UserAction extends ActionSupport{

private User user;

public User getUser() {

return user;

}

 

public void setUser(User user) {

this.user = user;

}

 

@Override

public String execute() throws Exception {

return "success";

}

 

}

User.java:

package  com.gufengxiachen.struts2_2.model;

 

public   class  User {

private  String  username ;

private   int   age ;

 

public  String getUsername() {

return   username ;

}

 

public   void  setUsername(String username) {

this . username  = username;

}

 

public   int  getAge() {

return   age ;

}

 

public   void  setAge( int  age) {

this . age  = age;

}

 

}

UserConversion.java(转换器类 ):

package com.gufengxiachen.struts2_2.conversion;

import java.util.Map;

import java.util.StringTokenizer;

 

 

import com.gufengxiachen.struts2_2.model.User;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

 

public class UserConversion extends DefaultTypeConverter{

@Override

public Object convertValue(Map<String, Object> context, Object value,

Class toType) {

//从页面到后台转换

if(User.class==toType){

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

String firstValue=str[0];

StringTokenizer st=new StringTokenizer(firstValue,";");

String username=st.nextToken();

int age=Integer.parseInt(st.nextToken());

User user=new User();

user.setUsername(username);

user.setAge(age);

return user;

}else if(String.class==toType)  //从后台向页面转换

   {

User user=(User)value;

String username=user.getUsername();

int age=user.getAge();

String userInfo="你的用户名: "+username+" 你的年龄: "+age;

return userInfo;

   }

return null;

}

 

}

UserAction-conversion.properties(配置转换器属性文件 ):

user=com.gufengxiachen.struts2_2.conversion.UserConversion

web.xml和实例一样。

 

我们可以看到result.jsp 页面显示:

你的用户名:zhangsan你的年龄:15

这个很好理解,当struts2接受参数时发现Action中没有属性与之匹配,当它发现UserAction-conversion.perproties文件时,发现有个转换器,然后转向相应的转换器,转换后返回结果。

我们可以看到转换器实现了一个类:DefaultTypeConverter,并且重写了

c onvertValue这个方法,这个方法就是执行转换的方法。在这个方法里,我们可以进行双向转换,即可以从页面传过来的String 转换为我们需要的对象,也可以经行反向转换,其实我们还可以继承 StrutsTypeConverter 类,这个类是 struts2 对类型转换的一个简单封装,它里面有两个方法一个是从 String 转换到对象, convertFromString(Map<String,Object> context,String[],values,Class toClass), 另一个是从对象转换到 String 类型为: converterToString Map<String ,Object> context,Object o,

推荐继承StrutsTypeConverter 类,因为它方便,清晰。

下面来总结一下复杂类型转换:

对于自定义类型转换器来说需要提供三个信息:Action 的名字, Action 中待转换的属性名以及该属性对应的类型转换器。其中 Action 的名字是通过属性文件 ( Action 同包 ) 来获得的, Action 中待转换的属性名是通过属性文件中的 key 值获得的,该属性对应的类型转换器是通过 key 值所对应的 value 值获得的。

可使用struts2 框架自带的类型转换器 StrutsTypeConverter 简化类型转换。 StrutsTypeConverter 继承于 DefaultTypeConverter 。提供两个抽象方法,分别为 convertFromString converToString ,分别实现从页面向后台对象转换和从后台对象转换成字符串

还有个全局类型转换,就是不特定哪个Action ,对所有 Action 中相同的对象进行转换,和上面的类型转换唯一的区别就是转换的配置文件,文件名特定为: xwork-conversion.perproties 。位置为 src 根目录下,内容为:待转换的类的全名(包括包名) = 转换器的名字。

类型转换就介绍这么多,其实在实际应用中,用的不是特别多,想了解更多,可以参考struts2 API 文档。

0
1
分享到:
评论

相关推荐

    struts2学习笔记3数据类型转换

    struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换

    struts2学习笔记三(第3讲.Struts2的类型转换)

    在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...

    struts2自学笔记

    Struts2自学笔记 Struts2是Java Web开发中的一款广泛应用的MVC框架,它基于Model-View-Controller设计模式,旨在简化企业级应用的开发流程。本自学笔记将深入探讨Struts2的核心概念、主要功能及其实现原理。 1. **...

    struts2简单实例(类型转换)

    在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...

    struts2 学习重点笔记

    - **优势**:使用 Struts2 可以显著提高开发效率,因为它能够处理很多基础任务,如数据接收、类型转换、验证等。 **1.2 Struts2 架构** - **MVC 架构**:Struts2 采用经典的 MVC 架构,分为模型(Model)、视图(View)...

    struts2学习笔记(完美总结)——转自OPEN经验库

    在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

    struts2课程笔记

    本课程笔记主要涵盖了Struts2的基础概念、核心功能及其工作流程。 首先,Struts2的处理流程是通过一系列的组件协作完成的,包括Filter Dispatcher(过滤器调度器)、Action、Interceptor(拦截器)和Result。当用户...

    张龙圣思园struts2学习笔记word

    笔记中可能详细讲解了Struts2的配置文件,如struts.xml,它是整个应用的配置中心,定义了Action的映射、结果类型、拦截器栈等。在Action配置中,我们可以指定Action类、方法以及对应的URL路径,实现请求与业务的关联...

    Struts2自学笔记——Struts2的文件上传

    这篇自学笔记将深入探讨Struts2的文件上传机制。 1. **文件上传原理** 文件上传是基于HTTP协议的POST请求实现的。在HTML表单中,通过`&lt;input type="file" /&gt;`元素让用户选择本地文件。当用户提交表单时,浏览器会...

    struts2学习笔记

    5. **类型转换与输入校验**:Struts2在类型转换过程中也会进行基本的校验,如检查非空、数值范围等。 **四.Struts2的核心:拦截器** 拦截器是Struts2的核心组件,它们在Action执行前后介入处理流程。拦截器可以...

    struts2 类型转换器

    3. 如果注解没有提供转换器,Struts2会搜索`struts-default.xml`和应用的`struts.xml`配置文件,查找`&lt;conversion&gt;`元素来定义转换器。 4. 如果仍然没有找到,Struts2会尝试使用JavaBeans的`PropertyEditor`机制进行...

    struts2学习笔记四(第4讲.Struts2的类型转换续)

    在"Struts2学习笔记四(第4讲.Struts2的类型转换续)"中,我们将会深入探讨Struts2中的类型转换机制,这是一个核心特性,用于处理Action类属性与HTTP请求参数之间的数据类型转换。 在HTTP请求中,数据通常是字符串...

    struts2数据类型转换器

    这篇博客“Struts2数据类型转换器”可能深入探讨了这个主题,虽然具体的细节无法在此给出,但我们可以根据Struts2中数据类型转换的工作原理来展开讨论。 在Java Web开发中,用户通过表单提交的数据通常是字符串形式...

    传智播客struts2.1源代码_自定义类型转换器

    类型转换器是Struts2框架的核心组件之一,其主要任务是将用户的输入(通常是字符串)转换为Action类中声明的字段类型。这在处理复杂的数据类型,如日期、枚举或自定义对象时尤其有用,因为默认的转换器可能无法满足...

    struts2简单实例(类型转换方法对比)

    `struts2test2`可能展示了局部类型转换的应用,`struts2test4`可能是关于全局类型转换的实例,而`struts2test3`可能用于演示处理大量数据类型的转换。通过查看和运行这些代码,你可以更直观地理解每种转换方法的实现...

    Struts2学习笔记

    3. **定义struts.xml**:在classpath中放置struts.xml文件,这是Struts2的核心配置文件,用于声明包、结果类型、拦截器以及Action等元素。 4. **创建视图和控制器**:在项目中编写JSP页面作为视图,同时定义Action类...

    struts2学习笔记.doc

    - **概念介绍**:Struts2框架内置了一套类型转换机制,但有时需要对特定的数据类型进行定制化的转换处理。 - **实现步骤**: - 创建自定义的类型转换器类。 - 在`struts.xml`中注册自定义转换器。 - 在Action类中...

    STRUTS2类型转换

    Struts2是一个流行的Java web开发框架,其核心是Action,而类型转换是Struts2处理用户输入数据的一个重要环节。Struts2内置了多种类型转换,可以将HTTP请求中的字符串数据转换为各种基本类型和复杂类型,如日期、...

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

Global site tag (gtag.js) - Google Analytics