`
yinxiaoyong
  • 浏览: 15792 次
  • 性别: Icon_minigender_1
  • 来自: 湘潭
最近访客 更多访客>>
社区版块
存档分类
最新评论

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  
赞一个!我也看过浪曦的视频,楼主的学习方法值得学习!

相关推荐

Global site tag (gtag.js) - Google Analytics