`

Struts2.2 Type Conversion

阅读更多

 

Struts2 的转换器:

    如果ActionPO 类(PO :就是Action 没有继承或实现任何父类或接口),即使转换过程发生了错误,Struts 还会继续执行,跳转配置页面

    只要实现了ValidationAware 接口,转换过程出错后才会返回配置的输入页面,需要实现哪些接口方法?这里只需要继承ActionSupport 这个类,如果必要只要实现Validate 这个方法即可,因为此类已经实现了ValidationAware 接口

 

    实现TypeConvert 接口:接口参数较多,需要手动判断转换类型;

    继承DefaultTypeConvert :需要手动判断转换类型;

    继承StrutsTypeConvert :针对不同转换提供转换接口;

 

局部注册:

    注册文件

        1、名称: Action类名-conversion.properties

        2、以key=value的方式指定属性的转换类,fullName=com.iflytek.convert. MyPointConverter,注意这里的fullName是需要转换的类的全名称,加包名,value是对转换类进行处理的Action

        3、 将此文件放置在与Action同目录的包路径中

全局注册:

    注册文件

        1、名称: xwork-conversion.properties

        2、以key-value的方式指定属性的转换类,例;

            org.lxh.convert.Point = com.iflytek.convert.MyPointConverter

            key 不能是属性 而是一个全限定名称的类 可以放置多个配置值对

        3 将此文件放置 web-inf/classes 目录下

 

Ok ,直接上代码:

TestAction.java:

package com.iflytek.action;

import java.awt.Point;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author xudongwang 2011-10-31
 * 
 */
public class TestAction extends ActionSupport {
//http://localhost:8080/Struts2.2_TypeConversion/test?name=2&age=1&date=1988-09-09&p=3,2
	private String name;
	private int age;
	private Date date;
	private Point p;

	@Override
	public String execute() throws Exception {
		return super.execute();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

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

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public Point getP() {
		return p;
	}

	public void setP(Point p) {
		this.p = p;
	}

}

 

MyPointConverter.java( 继承StrutsTypeConverter)

package com.iflytek.conversion;

import java.awt.Point;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

/**
 * @author xudongwang 2011-10-31
 * 
 */
public class MyPointConverter extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {

		Point p = new Point();
		String[] strs = (String[]) values;
		String[] xy = strs[0].split(",");
		p.x = Integer.parseInt(xy[0]);
		p.y = Integer.parseInt(xy[1]);
		return p;
	}

	@Override
	public String convertToString(Map context, Object o) {
		return o.toString();
	}

}

 

or

 

MyPointConverter02.java( 继承DefaultTypeConverter)

package com.iflytek.conversion;

import java.awt.Point;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

/**
 * @author xdwang 2012-6-25
 * 
 */
public class MyPointConverter02 extends DefaultTypeConverter {

	public Object convertValue(Map<String, Object> context, Object value,
			Class toType) {
		if (toType == Point.class) {
			Point point = new Point();
			String[] temps = (String[]) value;
			String[] params = temps[0].split(",");
			int x = Integer.parseInt(params[0]);
			int y = Integer.parseInt(params[1]);

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

		return null;
	}

}

 

struts.xml

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

<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.ui.theme" value="simple" />
	<package name="tags" extends="struts-default">
		<action name="test" class="com.iflytek.action.TestAction">
			<result>/test.jsp</result>
		</action>
	</package>
</struts>

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<!-- 过滤器 -->
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>com.iflytek.filter.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter>
		<filter-name>struts2</filter-name>
		<!-- 新的 -->
		<!--
			<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
		-->
		<!-- 旧的 -->
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>

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

 

xwork-conversion.properties (放在src 下)

java.awt.Point=com.iflytek.conversion.MyPointConverter02

 

test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'test.jsp' starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		name:
		<s:property value="name" />
		<br>
		age:
		<s:property value="age" />
		<br>
		date:
		<s:property value="date" />
		<br>
		<s:date name="date" format="yyyy/MM/dd HH:mm:ss"/><br/>
		<s:property value="p"/><br/>
	</body>
</html>

 

启动服务后,直接在地址栏输入:

http://localhost:8080/Struts2.2_TypeConversion/test?name=2&age=1&date=1988-09-09&p=3,2

页面显示:

name: 2
age: 1
date: 88-9-9
1988/09/09 00:00:00
3.0,2.0

 

 

 

分享到:
评论

相关推荐

    struts2 conversion

    Struts2 Conversion是一个重要的主题,尤其对于Java Web开发者而言,它是Apache Struts2框架中处理数据类型转换的关键部分。Struts2是一个流行的MVC(Model-View-Controller)框架,用于构建可维护、可扩展的Web应用...

    struts2xwork2帮助文档

    3. **Type Conversion**:XWork2提供类型转换机制,自动将请求参数转换为Action字段的类型。 4. **Exception Handling**:强大的异常处理机制,允许自定义错误页面和异常策略。 5. **Validation框架**:集成验证...

    invalid type conversion(解决方案).md

    invalid type conversion(解决方案).md

    [MMS_040318]DINT data type to String data type conversion.rar

    本资料 "[MMS_040318]DINT data type to String data type conversion" 关注的是如何将双整型(DINT)数据类型转换为字符串(String)数据类型。这个过程在需要将数值显示给人用户或者存储到文本格式的数据记录中时...

    Struts2实例 国际化 类型转换 struts标签

    类型转换(Type Conversion)是Struts2的一项重要特性,它能自动将请求参数转换为Action属性的预期类型。例如,用户输入的字符串可以自动转换为整数或日期。如果Struts2内置的转换器无法满足需求,开发者还可以...

    struts2-core-2.0.11源码

    9. **类型转换(Type Conversion)**:Struts2提供了一套强大的类型转换机制,位于`org.apache.struts2.convention.converters`包下,可以自动将请求参数转换为Action属性的期望类型。 10. **注解支持(Annotations...

    struts2 类型转换器

    2. 如果没有找到内置转换器,Struts2会在Action类上查找注解`@ConvertProperty`或`@Conversion`,以及Action类的字段上查找注解`@ConvertType`,以获取自定义类型转换器的信息。 3. 如果注解没有提供转换器,Struts2...

    struts2 最新版 不用去官网上下载了

    4. **类型转换(Type Conversion)**: Struts2提供了自动类型转换机制,使得从HTTP请求参数到Java对象的转换变得更加简单。 5. **国际化(Internationalization)**: Struts2支持多语言环境,开发者可以通过配置文件...

    struts-xwork-core源码

    3. **Type Conversion**: - 类型转换是Struts2自动将HTTP请求参数转换为Action字段的过程,避免了手动设置属性的繁琐。 4. **Validation**: - 数据验证是确保输入数据符合预期规则的关键部分。Struts2提供了...

    struts2类型转换深入总结

    此外,`Struts2TypeConversion.zip`这个压缩包文件可能包含了相关的示例代码、测试用例或者自定义转换器的实现,供学习者参考和实践。通过分析这些代码,我们可以更直观地了解如何在实际项目中应用Struts2的类型转换...

    Struts2.3.1.1.zip

    6. **类型转换(Type Conversion)**:Struts2自动处理HTTP请求参数到Action属性的类型转换,减轻了开发者的工作负担。 7. **国际化(i18n)支持**:Struts2内置了国际化的支持,方便开发多语言的应用程序。 8. **...

    struts 2.0

    8. **类型转换(Type Conversion)**: Struts 2.0自动进行类型转换,将HTTP请求参数转换为Action类的属性,减轻了开发者的工作负担。 9. **国际化(i18n)支持**: Struts 2.0提供了强大的国际化支持,开发者可以...

    struts2简单例子源码

    为了实现类型转换,我们需要创建一个实现了`org.apache.struts2.conversion.Converter`接口的类,并通过Struts2的配置文件(struts.xml)将这个转换器与相应的数据类型关联起来。这样,当Struts2处理表单提交时,就...

    浪曦\浪曦_Struts2应用开发系列_第1讲

    - 定制类型转换器:通过实现`org.apache.struts2.conversion.Converter`接口,可以自定义特定类型的转换规则。 4. **Struts2输入校验**: - **Validation框架**:使用注解或XML配置文件进行字段验证,如`@...

    Image-type-conversion.rar_conversion

    "Image-type-conversion.rar_conversion" 这个压缩包文件似乎专注于图像的色彩空间转换,特别是从彩色图像到灰度图像的转换。这个过程对于后续的图像分析和处理步骤,如目标检测,具有重要意义。 首先,让我们来...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    比如,如果只想在某个Action的某个字段上应用自定义转换器,可以在Action的配置中使用`conversion.properties`或者使用`@TypeConversion`注解。 在实际开发中,Struts2的类型转换有时会遇到一些问题,例如空值处理...

    struts2中文帮助文档

    5. **类型转换(Type Conversion)**:Struts2自动处理请求参数到Action属性的转换,减少了开发者的工作量。 6. **国际化(i18n)**:Struts2支持多语言环境,可以轻松地为应用添加不同语言的支持。 7. **Tiles...

    Struts2配置详解

    &lt;result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/&gt; &lt;result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult...

    struts2.1.6全部jar包

    - **类型转换(Type Conversion)**:Struts2自动处理请求参数到Action属性的转换,支持自定义类型转换。 - **强大的表单验证(Validation)**:通过XML或注解方式实现,可以对用户输入进行验证。 - **强大的结果...

Global site tag (gtag.js) - Google Analytics