Struts2
的转换器:
如果Action
是PO
类(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是一个重要的主题,尤其对于Java Web开发者而言,它是Apache Struts2框架中处理数据类型转换的关键部分。Struts2是一个流行的MVC(Model-View-Controller)框架,用于构建可维护、可扩展的Web应用...
3. **Type Conversion**:XWork2提供类型转换机制,自动将请求参数转换为Action字段的类型。 4. **Exception Handling**:强大的异常处理机制,允许自定义错误页面和异常策略。 5. **Validation框架**:集成验证...
invalid type conversion(解决方案).md
本资料 "[MMS_040318]DINT data type to String data type conversion" 关注的是如何将双整型(DINT)数据类型转换为字符串(String)数据类型。这个过程在需要将数值显示给人用户或者存储到文本格式的数据记录中时...
类型转换(Type Conversion)是Struts2的一项重要特性,它能自动将请求参数转换为Action属性的预期类型。例如,用户输入的字符串可以自动转换为整数或日期。如果Struts2内置的转换器无法满足需求,开发者还可以...
9. **类型转换(Type Conversion)**:Struts2提供了一套强大的类型转换机制,位于`org.apache.struts2.convention.converters`包下,可以自动将请求参数转换为Action属性的期望类型。 10. **注解支持(Annotations...
2. 如果没有找到内置转换器,Struts2会在Action类上查找注解`@ConvertProperty`或`@Conversion`,以及Action类的字段上查找注解`@ConvertType`,以获取自定义类型转换器的信息。 3. 如果注解没有提供转换器,Struts2...
4. **类型转换(Type Conversion)**: Struts2提供了自动类型转换机制,使得从HTTP请求参数到Java对象的转换变得更加简单。 5. **国际化(Internationalization)**: Struts2支持多语言环境,开发者可以通过配置文件...
3. **Type Conversion**: - 类型转换是Struts2自动将HTTP请求参数转换为Action字段的过程,避免了手动设置属性的繁琐。 4. **Validation**: - 数据验证是确保输入数据符合预期规则的关键部分。Struts2提供了...
此外,`Struts2TypeConversion.zip`这个压缩包文件可能包含了相关的示例代码、测试用例或者自定义转换器的实现,供学习者参考和实践。通过分析这些代码,我们可以更直观地了解如何在实际项目中应用Struts2的类型转换...
6. **类型转换(Type Conversion)**:Struts2自动处理HTTP请求参数到Action属性的类型转换,减轻了开发者的工作负担。 7. **国际化(i18n)支持**:Struts2内置了国际化的支持,方便开发多语言的应用程序。 8. **...
8. **类型转换(Type Conversion)**: Struts 2.0自动进行类型转换,将HTTP请求参数转换为Action类的属性,减轻了开发者的工作负担。 9. **国际化(i18n)支持**: Struts 2.0提供了强大的国际化支持,开发者可以...
为了实现类型转换,我们需要创建一个实现了`org.apache.struts2.conversion.Converter`接口的类,并通过Struts2的配置文件(struts.xml)将这个转换器与相应的数据类型关联起来。这样,当Struts2处理表单提交时,就...
- 定制类型转换器:通过实现`org.apache.struts2.conversion.Converter`接口,可以自定义特定类型的转换规则。 4. **Struts2输入校验**: - **Validation框架**:使用注解或XML配置文件进行字段验证,如`@...
"Image-type-conversion.rar_conversion" 这个压缩包文件似乎专注于图像的色彩空间转换,特别是从彩色图像到灰度图像的转换。这个过程对于后续的图像分析和处理步骤,如目标检测,具有重要意义。 首先,让我们来...
比如,如果只想在某个Action的某个字段上应用自定义转换器,可以在Action的配置中使用`conversion.properties`或者使用`@TypeConversion`注解。 在实际开发中,Struts2的类型转换有时会遇到一些问题,例如空值处理...
5. **类型转换(Type Conversion)**:Struts2自动处理请求参数到Action属性的转换,减少了开发者的工作量。 6. **国际化(i18n)**:Struts2支持多语言环境,可以轻松地为应用添加不同语言的支持。 7. **Tiles...
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult...
- **类型转换(Type Conversion)**:Struts2自动处理请求参数到Action属性的转换,支持自定义类型转换。 - **强大的表单验证(Validation)**:通过XML或注解方式实现,可以对用户输入进行验证。 - **强大的结果...