Struts2数据类型转换之自定义数据类型转换(二)

对于自定义的类型转换器来说,需要提供三个信息:

Action的名字、Action中带转换的属性名、该属性对应的转换器类

其中,action的名字是通过属性文件名来获取的,action中待转换的属性名是通过文件中的key获得的,该属性对应的转换器类是通过该key对应的value获取的。

例如上节中的UserAction-converter.properties,其文件内容为:

user=com.test.converter.UserConverter
这就告诉我们,对于UserAction这个action,我们可以使用
com.test.converter.UserConverter这个类完成user这个属性的转换工作。
 
上节中我们的转换器类使用的是ognl提供的DefaultTypeConverter类,现在我们采用Struts提供的StrutsTypeConverter来简化代码的编写。
 
StrutsTypeConverter继承自DefaultTypeConverter,并且提供了两个抽象方法:converterFromString与convertToString,分别表示从页面的String转化为后台对象,以及从后台对象转化为页面的字符串。
 
我们只需要实现这两个抽象方法即可。
我们新建一个类,UserConverter2:
package com.test.converter;

import java.util.Map;
import java.util.StringTokenizer;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.User;

public class UserConverter2 extends StrutsTypeConverter
{
    @Override
    public Object convertFromString(Map context, String[] values, Class toClass)
    {
        User user = new User();

        String str = values[0];

        StringTokenizer st = new StringTokenizer(str, ";");
        String username = st.nextToken();
        String password = st.nextToken();

        user.setUsername(username);
        user.setPassword(password);

        return user;
    }

    @Override
    public String convertToString(Map context, Object o)
    {
        User user = (User) o;

        String username = user.getUsername();
        String password = user.getPassword();
        String userInfo = "username: " + username + ", password: " + password;

        return userInfo;
    }
}

然后在UserAction-converter.properties将原来的内容注释掉,修改为:

user=com.test.converter.UserConverter2

重新打开页面,发现仍然可以正常工作。

如果在项目中大量使用User类,我们可以写一个全局的配置文件。在src下新建xwork-conversion.properties,内容为:

com.test.bean.User=com.test.converter.UserConverter2

这意味着,凡是需要转换User类型的属性,如果我们没有像上面那样针对某个Action写配置,那么就采用默认的UserConverter2类去实现转换。

时间: 2024-10-24 10:51:20

Struts2数据类型转换之自定义数据类型转换(二)的相关文章

Linechart + Datagrid 互动展示数据 (Linechart自定义数据点选择线)

如上图示,在linechart中添加红色Y线,拖动该线的过程中,经过数据点时,会实时更新datagrid中对应的X.Y值数据. 实现要点: 1.linechart添加Y线 继承mx.charts.chartClasses.ChartElement,自定义Y线. package { import flash.display.Graphics; import flash.geom.Point; import flash.text.TextField; import mx.charts.chartCl

asp.net mvc3 数据验证(三)—自定义数据注解

原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也是显而易见的,那就是不能重用. 还有一种是封装在自定义的数据注解中,优点是可重用,缺点是需要应对不同类型的模型. 现在我们以封装在自定义数据注解中的方法为例看下如何在asp.

Struts2请求数据自动封装和数据类型转换

方式1:jsp表单数据填充到action中的属性: 方式2:jsp表单数据填充到action的对象的属性: 方式1: 第一步:引包,省去 第二步:配置struts2的过滤器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmln

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int

Struts2类型转换(三)-类型转换与复杂属性的配合使用

一.类型转换与复杂属性配合使用 示例图示:form 标签的 name 属性可以被映射到一个属性的属性. 1)JSP页面主要代码如下: 1 <s:form action="testComplextProperty"> 2 <s:textfield name="deptName" label="DeptName"></s:textfield> 3 <!-- 映射属性的属性 --> 4 <s:tex

Echarts 地图(map)插件之 鼠标HOVER和tooltip自定义数据

在项目开发中,有需要用到地图的地方,百度的echarts地图插件就是个不错的选择, 这里总结一下地图自定义鼠标HOVER时的事件和自定义tooltip数据: 一.鼠标HOVER时的事件: 参照官方文档解释, 可以看出这款插件有丰富的鼠标事件可供选择: 调用鼠标HOVER事件的方法很简单,只需把以下代码放到charts()调用的函数的最底部即可 1 var ecConfig = require('echarts/config'); 2 myChart.on(ecConfig.EVENT.HOVER

我这么玩Web Api(二):数据验证,全局数据验证与单元测试

目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解的ModelState是微软在ASP.NET MVC中提出的一种新机制,它主要实现以下几个功能: 1. 保存客户端传过来的数据,如果验证不通过,把数据返回到客户端,这样可以保存用户输入,不需要重新输入. 2. 验证数据,以及保存数据对应的错误信息. 3. 微软的一种DRY(Don't Repeat

cacti自定义数据收集脚本,创建Data Templates和Graph Templates

参考这篇文章 http://www.mamicode.com/info-detail-187799.html 还有马哥的linux视频.  cacti使用思路: cacti自定义监控脚本进行监控的具体流程如下: 自定义数据收集方法,在Collection Methods下有2项,Data Queries(xml方法)和Data Input Methods (scripts, command方法) 数据收集了如何保存呢?数据模板Data Templates.数据模板定义了:怎么通过数据收集方法获取

用echartsjs 实现散点图与table表格双向交互,以及实现echarts取自于table数据,和自定义echarts提示内容

本人研究echarts已经有一段时间了,今天就分享几个关于echarts的小技巧.虽然看起来简单,但做起来却很繁琐,不过实用性倒是很好. 在一个大的页面中,左边为table表格,右边为echarts的散点图. 需求一,实现echarts中所有的散点取自table中的数据. 需求二:两个交互,交互1,点击左边的table中数据时,先实现table重新隔行变色,然后左边被点击的数据背景颜色变黄,右边的散点图点亮.通过table控制散点图. 交互2:当点击散点图中任意数据时,获取此数据来自于左边散点图