Struts2学习笔记1-类型转换

Struts2提供了很多基本类的类型转换功能,但是对于自定义类,是需要自己来实现类型转换功能的。

下面以一个简单的输入输出操作来说明Struts2如何自定义类型转换。

(1)新建输入和输出的jsp文件。

input.jsp

<!-- input.jsp -->
  <body>
  
    <form action="input.action" method="post">
    
   	用户名:<input type="text" name="username" size="20"><br>
   	年龄:<input type="text" name="age" size="20"><br>
   	出生日期:<input type="text" name="birthday" size="20"><br>
   	坐标:<input type="text" name="point" size="20"><br>
   	
   	<input type="submit" name="submit">
    
    </form>
  </body>

output.jsp 使用Struts2提供的标签库

<!-- output.jsp -->
<%@ taglib uri="/struts-tags" prefix="s" %>
<body>

<!-- value与com.test.login.InputAction字段属性对应 -->
	用户名:<s:property value="username"/><br>
	年龄:<s:property value="age"/><br>
	出生日期:<s:property value="birthday"/><br>
	坐标:<s:property value="point"/><br>
</body>
(2)web.xml文件配置

使用过滤器过滤所有URI

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


(3)struts.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package name="struts2" extends="struts-default">

		<action name="input" class="com.test.login.InputAction">
			<result name="success">/output.jsp</result>
		</action>
		
	</package>
</struts>

(4)新建处理类

package com.test.login;

import java.util.Date;

import com.test.bean.Point;

public class InputAction
{
    private String username;
    private int age;
    private Date birthday;
    private Point point;

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public Date getBirthday()
    {
        return birthday;
    }

    public void setBirthday(Date birthday)
    {
        this.birthday = birthday;
    }

    public Point getPoint()
    {
        return point;
    }

    public void setPoint(Point point)
    {
        this.point = point;
    }

    public String execute() throws Exception
    {
        return "success";
    }

}


(5)自定义类型Point

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;
    }

}


(6)在处理类同目录下新建类型转换配置文件

note:2014.4.7

今天发现一个现象,不需要类转换配置文件,程序同样能够运行起来!

我使用的Struts版本是:struts-2.3.16.1惊讶

注意文件名:

InputAction-conversion.properties

命名规则是:处理类-conversion.properties

point=com.test.converter.PointConverter
(7)新建类型转换类

package com.test.converter;

import java.util.Map;

import ognl.DefaultTypeConverter;

import com.test.bean.Point;

public class PointConverter extends DefaultTypeConverter
{
    @Override
    public Object convertValue(Map context, Object value, Class toType)
    {
        // String2Point
        if (Point.class == toType)
        {
            // Struts2 默认输入的为String []类型
            String[] original = (String[]) value;

            // 取第一个字符串 例如:"1,2"
            String firstValue = original[0];

            // 分割
            String[] resultValue = firstValue.split(",");

            // 转换成Point
            Point point = new Point();
            point.setX(Integer.parseInt(resultValue[0]));
            point.setY(Integer.parseInt(resultValue[1]));

            return point;
        }
        // Point2String
        else if (String.class == toType)
        {
            Point point = (Point) value;
            String result = point.getX() + "," + point.getY();
            return result;
        }

        return null;
    }
}


自此,所有工作完成,接下来见证结果:

输入界面:


输出界面:


说明类型转换成功!


http://dl.vmall.com/c0x0yuwaab

http://dl.vmall.com/c0rkdydb43

http://dl.vmall.com/c0vt1z7v05


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值