Structs2的类型转换—局部类型转换

Ognl强大的表达式语言,在导入项目的时候我们导入了ognl.jar包,内有TypeConverter类,struct主要依赖于他进行类型转换。

例子

 

input.jsp

<%@
taglib
prefix="s"
uri="/struts-tags"%>

<h3><font
color="red">使用都逗号将点的两个坐标分隔开</font></h3>

    <s:form
action="/new/pointConverter">

        <s:textfield
name="point"
label="point"></s:textfield>

        <s:textfield
name="age"
label="age"></s:textfield>

        <s:textfield
name="username"
label="username"></s:textfield>

        <s:textfield
name="date"
label="birthday"></s:textfield>

        <s:submit
loabel="submit"></s:submit>

    </s:form>

 

对应的坐标实体

Point.Java

package com.test.bean;

 

public
class Point {

    private
int
x;

    private
int
y;

    public
int getX() {

        return
x;

    }

    public
void setX(int x) {

        this.x = x;

    }

    public
int getY() {

        return
y;

    }

    public
void setY(int y) {

        this.y = y;

    }

}

 

 

 

自定义的类型转换类PointConverter,继承DefaultTypeConverter,重写convertValue

方法

package com.test.convertr;

 

import
java.lang.reflect.Member;

import java.util.Map;

 

import com.test.bean.Point;

 

import ognl.DefaultTypeConverter;

/**

* 自定义的转换类

* @author Administrator

*

*/

public
class PointConverter extends DefaultTypeConverter {

 

    @Override

    public Object convertValue(Map context, Object value, Class toType) {

        if (Point.class==toType) {

            Point point=new Point();

            String[] str=(String[])value;

            String[] paramValues=str[0].split(",");

            

            int x=Integer.parseInt(paramValues[0]);

            int y=Integer.parseInt(paramValues[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;

    }

}

 

写与表单相对应的PointAction类

package com.test.action;

 

import java.util.Date;

 

import com.opensymphony.xwork2.ActionSupport;

import com.test.bean.Point;

 

public
class
PointAction
extends ActionSupport{

    private Point point;

    private
int
age;

    private String username ;

    private Date birthday;

    public Point getPoint() {

        return
point;

    }

    public
void setPoint(Point point) {

        this.point = point;

    }

    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 getBirthday() {

        return
birthday;

    }

    public
void setBrithday(Date birthday) {

        this.birthday = birthday;

    }

    @Override

    public String execute() throws Exception {

        return
SUCCESS;

        

    }

}

告诉struct 我的Point属性使用我自己写的转换类转换。

在Action目录下建立PointAction-conversion.properties文件

point=com.test.convertr.PointConverter

 

配置structs.xml

<action
name="pointConverter"
class="com.test.action.PointAction">

    <result
name="success">/output.jsp</result>

</action>

 

建立output.jsp

<%@ taglib prefix="s" uri="/struts-tags"%>

point:<s:property
value="point"/><br>

    age:<s:property
value="age"/><br>

    username:<s:property
value="username"/><br>

    date :<s:property
value="date"/>

Structs2笔记③--局部类型转换案例的更多相关文章

  1. struts2学习笔记(3)——struts2的局部类型转换

    今天又学到了一个新的东西,就是struts2的类型转换. 为什么要类型转换? 今天我就要传一个点的坐标给你,保存时用一个自定义的Point类来保存. 因为在表单里面传过去的是字符串,如“12,23”, ...

  2. [Struts2学习笔记] -- 自定义类型转换

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  3. 4-1数据类型转换的基本概念 & 4-2 & 4-3数据类型转换案例 & 4-4习题

    4-1数据类型转换的基本概念 253是int类型的,赋值给长整型的n 这种就是强制的类型转换 自动类型转换又叫做饮食类型转换,因为他的转换我们是看不到的 实线表示无数据丢失的 虚线在转换时, doub ...

  4. Struts2学习笔记(七)——类型转换

    1.自动类型转换 Struts2内部提供大量类型转换器,用来完成数据类型转换问题: String和boolean.Boolean:完成字符串与布尔值之间的转换 String和char.Characte ...

  5. JavaScript 笔记(2) -- 类型转换 & 正则表达 & 变量提升 & 表单验证

    目录:  typeof, null, undefined, valueOf() 类型转换 正则表达式 错误: try, catch, throw 调试工具 变量提升 strict 严格模式 使用误区 ...

  6. swift学习笔记之-类型转换

    //类型转换 import UIKit /*类型转换(Type Casting) 1.类型转换 可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 2.类型转换使用 is 和 as 操作符实 ...

  7. Struts2 学习笔记19 类型转换 Part1

    现在来说一说类型转换,提到类型转换其实我们之前早已经用过了,在url传递参数的时候,我们传递过来的参数其实都是String类型的,在显示的时候都自动转换了,像这种简单的转换很好理解,我们要说的是,转换 ...

  8. R︱sparkR的安装与使用、函数尝试笔记、一些案例

    本节内容转载于博客: wa2003 spark是一个我迟早要攻克的内容呀~ ------------------------------------- 一.SparkR 1.4.0 的安装及使用 1. ...

  9. (C/C++学习笔记) 七. 类型转换

    七. 类型转换 ● 隐式类型转换 隐式类型转换 implicit type conversions #include<iostream> using namespace std; void ...

随机推荐

  1. Scala(二):元组、数组、映射

    元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...

  2. 求Read Depth

    如何划窗统计测序数据的reads数(depth):https://blog.csdn.net/shenshenwu666/article/details/80936374 方法1,用samtools ...

  3. SAP查找用户的登录记录

    1.可以使用USR02中有个上次登陆日期和登陆时间. 2.用SE38跑下RSUSR200,输入用户名即可查询上次登陆日期 3.SU10可以查到

  4. JavaWeb总结(七)

    Web状态管理 - HTTP协议使用的是无状态的连接 - 对容器而言,每一个请求都来自于一个新的客户 解决方案-表单隐藏字段 <input type=”hidden” name=”session ...

  5. Eclipse获取资源路径

    一.问题: 这几天做一个单机版的数据抓取项目,之前都加载了spring或者是maven 使用[this.getClass().getClassLoader().getResource("ma ...

  6. python基础学习1-类属性访问

    #!/usr/bin/env python # -*- coding:utf-8 -*- #====> __setattr__ 重写 设置类对象属性值时候调用的魔法方法 __getattr__( ...

  7. 13-[Mysql]--pymysql模块

    1.介绍 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事 ...

  8. 【BZOJ1048】 [HAOI2007]分割矩阵

    [BZOJ1048][HAOI2007]分割矩阵 题面 bzoj 洛谷 题解 \(dp[a][b][c][d][num]\)表示将矩形\((a,b,c,d)\)分成\(num\)个的最小方差,然后转移 ...

  9. 【JUC源码解析】SynchronousQueue

    简介 SynchronousQueue是一种特殊的阻塞队列,该队列没有容量. [存数据线程]到达队列后,若发现没有[取数据线程]在此等待,则[存数据线程]便入队等待,直到有[取数据线程]来取数据,并释 ...

  10. target属性用于返回最初触发事件的DOM元素。

    target属性用于返回最初触发事件的DOM元素. 在HTML文档中,我们为<p>元素绑定点击事件("click"),由于DOM元素的事件冒泡机制,我们点击<p& ...