`

struts2的类型转换续

阅读更多

接着我们要创建action来处理用户的输入数据

4 创建action

  private Point point ;
 private int age ;
 private String username ;
 private Date date ;
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public Date getDate() {
  return date;
 }
 public void setDate(Date date) {
  this.date = date;
 }
 public Point getPoint() {
  return point;
 }
 public void setPoint(Point point) {
  this.point = point;
 }
 public String execute() throws Exception {
  return SUCCESS ;

这里Action最好是继承ActionSupport类  public class PointConverterAction extends ActionSupport

因为ActionSupport本身已经实现许多我们经常要实现的功能,这样可以给我们省很多事情,有时只需简单的覆盖它的一些方法就可以实现相应的功能

 

5,创建类型装换器

我们可以通过查看struts2的api获得以下信息

java。lang。object

    |---ognl。DefaultTypeConverter

         |--org.apache.struts2.util.StrutsTypeConverter

最原始的的转换器需要实现TypeConverter

而ognl下的defaulttypeconverter已经给我们实现了这个接口,而struts2又提供给了我们一个更加简单的实现类StrutsTypeConveter

所以我们有两种基本的方法编写类型转换器

1.继承DefaultTypeConverter类

2。继承StrutsTypeConverter类

下面分别给出两种方法的实现

1.

package com.yxy.converter;

import java.util.Map;

import com.yxy.bean.Point;

import ognl.DefaultTypeConverter;

public class PointConverter extends DefaultTypeConverter {

 public Object convertValue(Map context, Object value, Class toType) {
  
  if(Point.class == toType) {
   
   Point point = new Point() ;
   
   String[] paramValue = (String[])value ;
   String[] pointValue = paramValue[0].split(",") ;
   
   int x = Integer.parseInt(pointValue[0]) ;
   int y = Integer.parseInt(pointValue[1]) ;
   
   point.setX(x) ;
   point.setY(y) ;
   
   return point ;
  }
  if(String.class == toType) {
   Point point = (Point)value ;
   int x = point.getX() ;
   int y = point.getY() ;
   String result = "[x=" + x +" , y=" + y +"]" ;
   return result ;
  }
  return null ;
 }
}

 

 

2.

package com.yxy.converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.yxy.bean.Point;

public class PointConverter2 extends StrutsTypeConverter {

 public Object convertFromString(Map context, String[] values, Class toClass) {
  
  Point point = new Point() ;
  
  String[] paramValues = values[0].split(",") ;
  
  int x = Integer.parseInt(paramValues[0]) ;
  int y = Integer.parseInt(paramValues[0]) ;
  
  point.setX(x) ;
  point.setY(y) ;
  
  return point ;
 }

 public String convertToString(Map context, Object o) {
  
  Point point = (Point)o ;
  
  int x = point.getX() ;
  int y = point.getY() ;
  
  String result = "[ x = " + x + ", y = "+y + "]";
  
  return result ;
 }

}

这两个方法可以实现双向的转换,即从用户端到服务器端和服务器端到用户端,其实很明显也是需要这样设计的

 

6,编写属性文件

现在已经编写好了相应的类型转换器,我们需要将利用属性文件使用它

在action的同一个目录下面放置属性配置文件,命名规则是***-conversion。properties,其中***为action的名字,后面的对于所有局部类型转换器都一样(关于局部和全局稍后再讲)

在属性文件里面编写下面一行代码,其中point指定的是action中需要被转换的属性名,后面很明显表示转换器所在的完整类

point=com.yxy.converter.PointConverter

这里强调主要是考虑到与后面全局类型转换器进行编写上的比较

 

7,编写struts。xml文件

因为所有应用的业务文件都已经编写完了,这时我们需要将所有的流程进行控制,这样就需要用到struts.xml,

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <package name="struts2" extends="struts-default">
  <action name="PointConverter" class="com.yxy.action.PointConverterAction">
   <result name="success">/output.jsp</result>
   <result name="input">/input.jsp</result>
  </action>
 </package>
</struts>

代码如上,这里定义了返回页面,对应于相应的返回字符串

 

8,编写输出页面output。jsp

转换后的信息需要输出,

   point:<s:property value="point" /><br>
   age:<s:property value="age" /><br>
   username:<s:property value="username" /><br>
   birthday:<s:property value="date" />

这样,所有的工作就完成了,呵呵

 

未完待续。。。。。。。。。。。。

 

补充:

对于全局类型转换配置文件:

命名规则:xwork-conversion.properties

内容:com.yxy.bean.Point = com.yxy.converter.PointConverter2

其中前面表示在应用中需要转换的类,在局部类型转换中表示的是某个action中需要被转换的属性,注意比较,

后面表示完成这个类类型转换的类,同局部类型转换一样

 

如果需要转换的类型为Map,List等集合类,将相应的类型转换类改变即可


 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
7 楼 yinxiaoyong 2009-02-11  
怎么变成这样了,全是&nbsp
6 楼 yinxiaoyong 2009-02-11  
kjj 写道

恕我浅陋 据我所知,struts2 也就是webwork2 会自动转换我们的输入对象, 比如


Java代码

&nbsp;&nbsp;&nbsp;class&nbsp;someaction&nbsp;extends&nbsp;ActionSupport{ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user; &nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.... &nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;execute(){ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.age); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.name); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;SUCCESS; &nbsp;&nbsp;
} &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;
class&nbsp;User{ &nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;age; &nbsp;&nbsp;
&nbsp;&nbsp;
}&nbsp;&nbsp;   class someaction extends ActionSupport{
        User user;

        ....

        public String execute(){
           System.out.println(user.age);
           System.out.println(user.name);
           return SUCCESS;
}
   }
class User{

    String name;
    int age;

}




呵呵,明显我还没有kjj研究的这么深入啊,其实我也只是刚刚接触,在这里做下笔记,关于这些我也去看看,但是我倒是见过在客户端进行输入的表单里面直接使用类似于User.name甚至直接就可以指定该字段是具体一个List类型对象的第几个元素,呵呵,多交流
5 楼 kjj 2009-02-11  
恕我浅陋
据我所知,struts2 也就是webwork2 会自动转换我们的输入对象,
比如
   class someaction extends ActionSupport{
        User user;

        ....

        public String execute(){
           System.out.println(user.age);
           System.out.println(user.name);
           return SUCCESS;
}
   }
class User{

    String name;
    int age;

}
4 楼 yinxiaoyong 2009-02-09  
kjj 写道
楼主先说说你这样做类型转换的意义在那里!


由于服务器端需要收集用户的输入信息,而用户的输入信息在客户端只会以是字符串类型存在,而用户需要表现出来的类型当然就需要在服务器端首先进行类型转换,变成正确的数据类型后保存在服务器端
3 楼 kjj 2009-02-08  
楼主先说说你这样做类型转换的意义在那里!
2 楼 yinxiaoyong 2009-02-08  
谢谢,你是第一个回帖的哦,真的很感谢,这样让我有信心再继续努力写下去,呵呵
1 楼 rswh110 2009-02-08  
赞一个!我也看过浪曦的视频,楼主的学习方法值得学习!

相关推荐

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

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

    Struts2官网最新2.38版jar包

    - `xwork-core-2.3.8.jar`:XWork是Struts2的基础,提供Action管理、类型转换、国际化、异常处理等功能。它的Action机制被Struts2继承并扩展,使得业务逻辑的处理更加灵活。 3. **FreeMarker模板引擎**: - `...

    struts2实现文件下载实例源代码

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨...

    Struts2.Hibernate3.2.Spring2.0整合续一

    总结来说,"Struts2.Hibernate3.2.Spring2.0整合续一"这个主题主要探讨了如何将这三个强大的框架结合在一起,构建高效、灵活的J2EE应用程序。通过对每个框架的理解和整合技巧的掌握,开发者可以构建出满足复杂业务...

    struts2 文件上传和下载

    - **Action拦截器**: Struts2的FileUploadInterceptor处理文件上传,它会自动将文件数据转换为`java.io.File`或`org.apache.struts2.dispatcher.multipart.UploadedFile`对象。 - **处理上传**: Action方法可以...

    struts2的文件上传

    2. 将接收到的`FileItem`对象(Struts2会自动处理这部分)转换为`File`对象,或者直接将其保存到服务器的某个目录下。 3. 如果需要,可以对上传的文件进行处理,如重命名、格式转换等。 4. 最后,设置Action的结果,...

    swfupload与strut2结合数据直接写入数据库

    与Struts2框架相结合,可以构建出高效的文件上传系统,使得用户上传的数据能够直接写入到数据库中,提高了用户体验并优化了后台处理流程。 在"swfupload与strut2结合数据直接写入数据库"的场景中,有几个关键的技术...

    多文件上传swfupload

    1. **Struts2 配置**:在Struts2的Action类中,你可以声明一个类型为`List&lt;Part&gt;`的属性,Struts2会自动将上传的文件分配到这个属性中。 2. **文件保存**:在处理Action的方法中,你可以遍历`Part`列表,对每个文件...

    吴天雄--SpringMVC笔记.doc

    - 自定义类型转换器,允许自定义数据类型转换规则。 - 跳转方式:forward 和 redirect,分别对应页面内部转发和外部重定向。 - 作用域传值:session、request、application 等不同范围的变量传递。 - 文件上传与...

    java面试题续

    2. **必需的分区类型**:在安装Linux系统时,通常需要两种分区类型:交换分区(`swap`)和根分区(`/`)。交换分区用于存储内存页面副本以缓解物理内存不足的情况;根分区则是整个文件系统的起点,通常包含操作系统...

    uploadSSH上传视频

    2. **文件上传**:在Web应用中,`Struts`框架支持文件上传功能。这通常通过`Apache Commons FileUpload`库实现,该库允许用户从表单中上传文件。开发者需要配置ActionForm类,包含一个File类型的属性来接收上传的...

    Java文件下载相关资料搜集

    8. **使用Struts框架**:Struts框架也提供了文件下载的支持,比如在Struts2中,可以通过Action的 StreamingResult 或者 FileResult 结果类型来实现文件下载。 在处理文件下载时,还需要注意以下几点: - **异常...

    jspsmart 文件上传

    9. **整合框架**:在实际开发中,jspsmart常与Spring MVC、Struts2等Web框架结合使用,提供更便捷的文件上传解决方案。 10. **前端交互**:前端页面需要配合jspsmart组件,使用特定的表单结构和属性,例如设置...

    批量图片预览上传(extjs,支持html5和flash)

    在批量图片预览中,可以利用FileReader接口的readAsDataURL方法,将图片文件转换成Base64编码的URL,然后在页面上预览。这种方式无需服务器介入,但可能受到浏览器对文件大小限制的影响。 3. **Flash支持**:尽管...

    Flex+Java多文件上传

    在Java后端,我们可以使用诸如Spring MVC、Struts2等Web框架来接收和处理这些文件数据。Java的Servlet API提供了HttpServletRequest对象,其中的getParts()方法可以用于接收多部分表单数据,即上传的文件。文件内容...

    在线音乐播放系统

    音乐上传功能允许管理员或授权用户上传音频文件,系统需要进行文件类型检查、大小限制以及格式转换(如MP3、WAV等)。在上传过程中,系统需要生成唯一的文件标识,并将其与数据库中的音乐资源信息关联,以便后续的...

    单文件与多文件上传uploadify控件的java版本

    在后端,Java开发者通常会使用Spring MVC或者Struts2等框架来接收上传的文件。以Spring MVC为例,你需要创建一个Controller方法来处理文件接收: ```java @RequestMapping(value = "/upload", method = Request...

    ssm网页上传和下载文件需要的jar包

    2. 验证上传的文件,例如检查文件类型、大小等限制。 3. 使用`commons-fileupload`解析文件,将`MultipartFile`转换为`FileItem`对象。 4. 使用`commons-io`库将文件保存到服务器的指定位置,可能需要创建一个临时...

    JAVA上百实例源码以及开源项目源代码

    消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...

Global site tag (gtag.js) - Google Analytics