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. Target Audiences在弹出的people picker中不显示Alias列有空的项目

    [客户需求] 当编辑webpart时,Target Audiences在弹出的people picker搜索时候,Alias列有空的项目,客户要求不显示Alias列有空的项目. [分析] 首先这个“D ...

  2. starshot常见问题(New)

    Element组件网址: http://element-cn.eleme.io/#/zh-CN/component/message Layer组件网址: https://www.layui.com/d ...

  3. linux 用时间创建文件夹

    命令: mkdir `date +%Y%m%d%H%M%S`

  4. WPF字体模糊解决方案

    原文:WPF字体模糊解决方案 WPF对字体渲染做了很大的改善,与Winform窗体字体相比较,更加平滑,但是当字体大小较小时,则会出现字体模糊的现象.可通过以下方法进行改善处理: 对于XAML用户界面 ...

  5. sqlplus 格式化一例

    对字符型,用axx格式,对数字型,用9999 格式(999表示占用3列) SQL> col 'ts#' format 999SQL> col 'file#' format 999SQL&g ...

  6. 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET

    原文:http://vckbase.com/index.php/wv/1225.html 一.前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用 ...

  7. SpringCloud-微服务网关ZUUL(六)

    前言:前面说过,由于微服务过多,可能某一个小业务就需要调各种微服务的接口,不可避免的就会需要负载均衡和反向代理了,以确保ui不直接与所有的微服务接口接触,所以我们需要使用一个组件来做分发,跨域等各种请 ...

  8. SpringBoot日记——SpringMvc自动配置与扩展篇

    为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...

  9. Linux中的mysql指令

    如何启动/停止/重启MySQL一.启动方式1.使用 service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3 ...

  10. 自动化jenkins报:ModuleNotFoundError: No module named 'common'

    直接执行脚本是没有问题,报如下错误: 你已经在run.py脚本加路径了为什么还会报这个错呢,就是你加的路径,应该在所有的包上面,才不会报这个错,如下: 注:以下是我的解决方法仅作参考.如果我的发表的内 ...