论坛首页 Java企业应用论坛

《研磨struts2》第十一章 类型转换 之 11.2 内建类型转换器

浏览 1181 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-26  

11.2  内建类型转换器

Struts2内建的类型转换器能处理绝大多数的需求,只有极特殊情况才需要自定义类型转换器。在这一节中就一起来看看Struts2的内建类型转换器都可以完成哪些工作。

11.2.1简单类型

Struts2已经内置了基本数据类型及其包装类和其他一些常见的用于表示数字/日期类型的类型转换器,包括:

  • int/Integer:整数型
  • short/Short:短整数型
  • long/Long:长整型
  • float/Float:浮点型
  • double/Double:双精度型
  • boolean/Boolean:布尔型
  • byte/Byte:字节型
  • char/Character:字符型
  • BigInteger:大整数型
  • BigDecimal:大浮点数型
  • Date:日期型

11.2.2枚举类型

枚举类型往往被人们忽略,其实Struts2的Action中也可以直接使用枚举类型,其对应的参数值只需要对应枚举定义时的定义名即可。

       比如有如下的枚举定义,示例代码如下:

 

java代码:
  1. public enum ColorEnum {  
  2.     red,blue,green;  
  3. }  

在Action引用的时候,只需传入枚举的定义名(red,blue或green)即可,示例代码如下:

 

java代码:
  1. public class ConverterAction extends ActionSupport {  
  2.     private ColorEnum color;  
  3.     public ColorEnum getColor() {  
  4.         return color;  
  5.     }  
  6.     public void setColor(ColorEnum color) {  
  7.         this.color = color;  
  8.     }  
  9.       
  10.     public String execute() throws Exception {  
  11.         System.out.println("color="+color);  
  12.         System.out.println("传入的颜色是红色吗?答案是 :"+(color==ColorEnum.red));  
  13.         return SUCCESS;  
  14.     }  
  15. }  

其在struts.xml中的定义为:

 

java代码:
  1.  <package name="helloworld" extends="struts-default">  
  2.      <action name="converterAction" class="cn.javass.convert.ConverterAction">  
  3. <result>/converter/success.jsp</result>  
  4. lt;/action>  
  5.  </package>  

为了简单,就不去写页面了,直接通过URL来访问,使用get传参的方式,访问的URL为:“http://localhost:9080/helloworld/converterAction.action?color=red”,运行后,后台输出的结果为:

 

java代码:

可以看到,使用red作为参数将得到枚举中red的那个枚举值。

11.2.3复合类型

这里提到的复合类型与上一节的简单类型相比,并不是Action的属性的类型变得复杂了,而是操作属性的OGNL变得复杂了,其最终操作的无非还是上面的那些简单类型。

其实,这些东西在第四章的时候都已经提到过了,只不过是在这里再次归纳总结,让大家看到类型转换器的全貌。

1:JavaBean

       在Action中定义一个JavaBean属性,那么访问JavaBean中的某一个属性,需要使用Action中JavaBean的属性名.JavaBean中的属性名。

       比如有长方形这个JavaBean:

 

java代码:
  1. public class Rectangle {  
  2.     private int width;  
  3.     private int height;  
  4.       
  5.     public int getWidth() {  
  6.         return width;  
  7.     }  
  8.     public void setWidth(int width) {  
  9.         this.width = width;  
  10.     }  
  11.     public int getHeight() {  
  12.         return height;  
  13.     }  
  14.     public void setHeight(int height) {  
  15.         this.height = height;  
  16.     }  
  17. }  

在Action定义一个长方形类型的属性,并提供相应的getter/setter方法,示例代码如下:

 

java代码:
  1. public class ConverterAction extends ActionSupport {      
  2.     private Rectangle rectangle;  
  3.     public Rectangle getRectangle() {  
  4.         return rectangle;  
  5.     }  
  6.     public void setRectangle(Rectangle rectangle) {  
  7.         this.rectangle = rectangle;  
  8.     }  
  9.     //其它的就省略了  
  10. }  

需要在提交页面上用<s:textfield name=” rectangle.width”/>来引用Action的rectangle属性的width属性。就相当于调用这个Action的get Rectangle().setWidth()方法。

2:数组和List—简单属性

       使用数组和List及其相似,在提交页面上并无区别,在Action中也仅是声明的区别。比如在Action中需要得到提交页面提交的两组身高和体重的数据:

 

java代码:
  1. public class ConverterAction extends ActionSupport {      
  2.     private int heights[];  
  3.     private List<Integer> weights;  
  4.     public int[] getHeights() {  
  5.         return heights;  
  6.     }  
  7.     public void setHeights(int[] heights) {  
  8.         this.heights = heights;  
  9.     }  
  10.     public List<Integer> getWeights() {  
  11.         return weights;  
  12.     }  
  13.     public void setWeights(List<Integer> weights) {  
  14.         this.weights = weights;  
  15.     }  
  16.     //其它的就省略了  
  17. }  

对应的提交页面上需要添加:

 

java代码:
  1. <s:textfield name="heights"/>  
  2. <s:textfield name="heights"/>  
  3. <s:textfield name="weights[0]"/>  
  4. <s:textfield name="weights[1]"/>  

对应的提交页面上在<s:textfield>的name属性上写不写对应的索引都可以。Action都会正确的获取到用户的输入。

3:数组和List—JavaBean

       如果数组或List里面放的是JavaBean,大家不可以掉以轻心,在提交页面上的写法就不那么随便了。

       仍然使用上面长方形的JavaBean(里面有width和height两个属性)来做说明,在Action中需要接收一个长方形类型的数组,示例代码如下:

 

java代码:
  1. public class ConverterAction extends ActionSupport {      
  2.     private Recta
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics