`
johnson2132
  • 浏览: 27151 次
  • 性别: Icon_minigender_1
  • 来自: 潍坊
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2 类型转换

阅读更多

      在Web项目开发中由于很多数据在页面上显示时候都是以字符串类型来显示。而在控制层或者model层中开发人员使用Java开发时候,对于这些从页面上传入或者需要传到页面上显示的数据开发的类型不一定都是字符串类型。因此常常需要在视图和非视图之间进行类型转换

     

Struts2本身所具有的类型转换功能。大致分为以下:

l         intbooleandoubleJava基本类型转换。

l         Date类型转换。

l         List类型转换。

l         Set类型转换。

l         数组类型转换

基本数据类型转换功能

public class AddMaterialAction extends ActionSupport { //属性类型需要类型转换的对象 private Material material; public Material getMaterial() { return material; } public void setMaterial(Material material) { this.material = material; } public String execute() throws Exception { return SUCCESS; } }

 

<!-- Action所在包定义 --> <package name="C07.1.1" extends="struts-default"> <action name="addMaterial" class="com.action.AddMaterialAction"> <result name="input">/jsp/addMaterial.jsp</result> <result name="success">/jsp/showMaterial.jsp</result> </action> </package>

 

<!-- 材料输入表单 --> <table> <s:form id="materialForm" action="addMaterial"> <s:textfield name="material.material" label="材料名"></s:textfield> <s:textfield name ="material.bid" label="价格"></s:textfield> <s:textfield name ="material.mount" label="库存量"></s:textfield> <s:datetimepicker name ="material.expireDate" label="过期日期"></s:datetimepicker> <s:submit value="提交"></s:submit> </s:form> </table

 

<!-- 材料数据显示 --> <table> 材料名: <s:property value="material.material" ></s:property> 价格: <s:property value="material.bid" ></s:property> 库存量: <s:property value="material.mount" ></s:property> 过期日期: <s:property value="material.expireDate" ></s:property> </table>

      在页面上输入一个Material对象的所有属性值,并将它的属性值显示在页面上。由于之前很多示例中已经有过Material这个JavaBean对象代码。这里就没有写出给读者参阅。由以显示的示例代码也可知,Material对象由材料名、价格、库存量和材料过期日期四个属性组成。恰好这四个属性的数据类型分别是Stringdoubleintdate四个Java类型,因此由该示例可以明白Struts2的类型转换是如何转换这些Java类型。由于Struts2也是使用拦截器来进行类型转换,因此对这些基本的Java类型转换根本不需要开发人员编写任何类型转换代码

      在输入数据的页面,笔者使用OGNLStruts2标签来建立一个数据输入的表单。使用的material对象在Action中已定义完成,并建立gettersetter方法。这样在JSP页面可以设置该对象。在页面中按“提交”按钮后,就相当于“setMaterial()”方法。在系统根据struts.xml配置文件执行Action之前,Struts2自带的类型转换拦截器就已经将Material对象中几个属性变量的类型由页面上输入时候的String类型转换为Material对象属性变量被定义的数据类型

     在数据显示页面上显示数据时候,实际上做的事情是上述操作的一个逆向操作。Material对象中每个属性变量的数据类型又都转换为页面上需要显示的String类型

   

 

     List集合类型数据类型转换功能

public class AddMaterialAction extends ActionSupport { private List<Material> materialList; public String execute() throws Exception { return SUCCESS; } public List<Material> getMaterialList() { return materialList; } public void setMaterialList(List<Material> materialList) { this.materialList = materialList; } }


 

 

<package name="C07.1.2" extends="struts-default" > <action name="addMaterial" class="com.action.AddMaterialAction"> <result name="input">/jsp/addMaterial.jsp</result> <result name="success">/jsp/showMaterial.jsp</result> </action> </package>

 

#集合属性-List类型 Element_materialList=com.model.Material

     该属性文件属于局部类型转换属性定义文件。文件名要以ActionName打头,然后以“--conversion.properties”结尾。这表示是对该Action中的List集合类型指定元素类型。而且该属性文件一定要和Action放在同一目录下。否则运行系统时候Struts2是不会知道该ActionList集合类型变量元素是何种类型对象

          试设想有一种情况,多个Action都需要将某一变量的类型进行转换。此时可以像之前所述使用属性文件来定义被转换类型的变量。但是1Action定义1个属性文件则太浪费时间。因此Struts2中还有个全局类型转换属性定义文件,这样所有需要类型转换的Action都可以调用该文件中定义的需要类型转换的变量。全局属性文件名字必须为“xwork-conversion.properties。文件中定义的内容其实和局部属性文件中大同小异,只是这些被定义的变量可以在所有Action中进行类型转换。全局属性文件没必要和具体Action代码文件放在一起,只需要放在源代码根目录下即可。也就是说全局属性文件直接放在“src”文件夹下即可

<table> <s:form id="materialForm" action="addMaterial" theme="simple"> <table> <tr> <td>材料名</td> <td>价格</td> <td>库存量</td> <td>过期日期</td> </tr> <s:iterator value="new int[4]" status="m"> <tr> <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td> <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td> <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td> <td><s:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td> </tr> </s:iterator> <tr> <td colspan="4"><s:submit value="提交"></s:submit> </tr> </table> </s:form> </table>

 

<table> <tr> <td>材料名</td> <td>价格</td> <td>库存量</td> <td>过期日期</td> </tr> <s:iterator value="materialList" status="m"> <tr> <td><s:property value="material" ></s:property></td> <td><s:property value="bid" ></s:property></td> <td><s:property value="mount" ></s:property></td> <td><s:property value="expireDate" ></s:property></td> </tr> </s:iterator> </table>

 

    Set集合类型数据类型转换功能

 

 

#集合属性-Set类型 Element_materialSet=com.model.Material #制定索引 KeyProperty_materialSet=material

 

 

<table> <s:form id="materialForm" action="addMaterial" theme="simple"> <table> <tr> <td>材料名</td> <td>价格</td> <td>库存量</td> <td>过期日期</td> </tr> <s:iterator value="new int[4]" status="m"> <tr> <td><s:textfield name="%{'materialSet.makeNew['+#m.index+'].material'}" /></td> <td><s:textfield name="%{'materialSet.makeNew['+#m.index+'].bid'}" /></td> <td><s:textfield name="%{'materialSet.makeNew['+#m.index+'].mount'}" /></td> <td><s:datetimepicker name="%{'materialSet.makeNew['+#m.index+'].expireDate'}" /></td> </tr> </s:iterator> <tr> <td colspan="4"><s:submit value="提交"></s:submit> </tr> </table> </s:form> </table>


 

 

 

 

 

 

 

 

<!-- 材料数据显示 --> <table> <tr> <td>材料名</td> <td>价格</td> <td>库存量</td> <td>过期日期</td> </tr> <s:iterator value="materialSet" status="m"> <tr> <td><s:property value="material" ></s:property></td> <td><s:property value="bid" ></s:property></td> <td><s:property value="mount" ></s:property></td> <td><s:property value="expireDate" ></s:property></td> </tr> </s:iterator> </table>


 

     像List集合类型示例一样笔者定义了一个Set集合类型变量materialSet。不过该变量必须显示定义它的类型。如代码中所示“new HashSet()”一样。这是必须的,否则Struts2不知道该变量是哪一种Set集合

      属性文件中除了继续定义元素对象类型之外,还需要定义该集合类型变量的索引即代码中所示的“KeyProperty_materialSet=material”。其实定义索引的通用格式为“KeyProperty_SetName=属性”。也许有的读者很难理解,其实也不很难。首先在Action中定义的Set集合类型变量名要写在“KeyProperty_”之后。然后“=”后面写的是元素对象中开发者想指定为索引的属性。比如示例中元素对象是Material对象。该对象有几个属性,其中有个属性为“material”是代表Material对象的材料名字,就把它定义为索引。这里笔者的定义想表明的意思就是materialSet这个Set集合类型变量的索引是组成它的元素Material对象中的material属性。如果属性文件中写成“KeyProperty_materialSet=bid”则表明把Material对象中表示材料价格的bid属性作为materialSet的索引

    在数据输入的JSP页面中,笔者使用了OGNL中的“makeNewAPI。由它来建立materialSet中的material对象。然后依次输入material对象各个属性数据

 

分享到:
评论
1 楼 新入职 2010-08-02  
沙发了?gd

相关推荐

    STRUTS2类型转换

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

    struts2 类型转换器

    在Struts2中,类型转换器(Type Converter)是框架的一个关键特性,用于处理Action类中属性的自动类型转换。这个特性使得开发者无需手动进行数据类型之间的转换,从而提高了开发效率和代码的可读性。 标题中的...

    struts2类型转换

    本篇文章将深入探讨Struts2中的类型转换机制。 1. **类型转换的概念** 类型转换是指将一个数据类型的值转换为另一个数据类型的过程。在网络请求中,用户输入的数据通常是字符串类型,而服务器端的Action类属性可能...

    Struts2类型转换(一)----常规类型,自定义类型,错误处理

    Struts2是一个强大的MVC框架,它在处理Web应用程序时提供了许多便利,其中包括类型转换功能。类型转换是将用户输入的数据自动转化为服务器端处理所需的类型,这样可以避免手动转换带来的繁琐工作。本篇文章将深入...

    struts2类型转换和国际化

    在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...

    struts2类型转换深入总结

    Struts2提供了一些工具类和方法来辅助类型转换,比如`FieldError`用于记录转换失败的字段和错误信息,`ValueStack`提供了`convertValue`方法进行转换,以及`ActionContext`中的`getValueStack`方法获取当前栈顶的`...

    struts2类型转换和验证流程图

    ### Struts2类型转换与验证流程详解 #### Struts2框架概述 Struts2是一个用于构建企业级Java Web应用的强大框架。它集成了MVC设计模式,并提供了丰富的插件支持和灵活的配置选项。在Struts2中,类型转换和验证机制...

    struts2简单实例(类型转换)

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

    struts2类型转换 拦截器 校验的例子

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括类型转换、拦截器和校验机制。本文将深入探讨这些关键知识点,并通过实际例子来帮助你理解它们的工作原理和应用。 首先,我们来看看**类型转换...

    struts2类型转换机制

    struts2类型转换机制

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

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

    Struts2类型转换与输入校验 .zip

     熟悉和掌握Struts2自定义类型转换。  熟悉和掌握Struts2内建校验的操作方法  实验环境与设备:  已经接入局域网的网络实验室,机器上装有IE浏览器等;  strtus2.5.8  实验内容: (1) 编写一个...

    Struts2 ConverterType类型转换 案例源码

    Struts2是一个强大的MVC框架,它在处理用户请求时提供了丰富的功能,其中包括类型转换(Converter)。类型转换是Struts2框架中一个重要的特性,它允许我们把前端表单提交的数据自动转换为后端Java对象的属性。在这个...

    struts2 类型转换 数据校验

    2. **自定义转换器**:如果需要处理特殊类型或有特定转换规则,可以通过实现`org.apache.struts2.util.TypeConverter`接口创建自定义转换器,并通过`@Result`注解或者`struts.xml`配置文件进行注册。 3. **转换异常*...

    STRUTS2类型转换错误导致OGNL表达式注入漏洞分析1

    《STRUTS2类型转换错误导致OGNL表达式注入漏洞分析》 STRUTS2框架在处理用户输入时出现的类型转换错误,可能导致OGNL(Object-Graph Navigation Language)表达式注入漏洞。此漏洞允许攻击者通过精心构造的输入,...

    [原]Struts2类型转换

    在Struts2中,类型转换是一项关键功能,它允许框架将用户输入的数据自动转换为应用程序需要的特定数据类型。这篇博客文章可能是关于Struts2内部的类型转换机制及其使用的探讨。 在Struts2中,类型转换是通过`...

Global site tag (gtag.js) - Google Analytics