package com.tao.struts2.bean;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
@SuppressWarnings("unchecked")
@Override
public Object convertValue(Map context, Object value, Class toType) {
if (Point.class == toType) {
String[] params = (String[]) value;
String[] paramValues = params[0].split(",");
Point point = new Point();
point.setX(Integer.parseInt(paramValues[0]));
point.setY(Integer.parseInt(paramValues[1]));
return point;
} else if (String.class == toType) {
Point point = (Point) value;
return new String("[x=" + point.getX() + ", y=" + point.getY()
+ "]");
}
return super.convertValue(context, value, toType);
}
}
一、自定义bean
package com.tao.struts2.bean;
public class Point {
private int x;
private int y;
public Point() {
super();
}
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;
}
}
二、Action类
package com.tao.struts2.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import com.tao.struts2.bean.Point;
@SuppressWarnings("serial")
public class PointAction extends ActionSupport {
private Point point;
private String userName;
private int age;
private Date birthday;
public String process() {
return SUCCESS;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.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;
}
}
<?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>
<package name="default" namespace="/user" extends="struts-default">
<action name="register" class="com.tao.struts2.action.PointAction"
method="process">
<result name="input">/trans/register.jsp</result>
<result name="success">/trans/success.jsp</result>
</action>
</package>
</struts>
三、页面代码
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/user/register.action" method="post">
点: <input name="point" type="text" /><br />
名字: <input name="userName" type="text" /><br />
年龄: <input name="age" type="text" /><br />
生日: <input name="birthday" type="text" /><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>info</title>
</head>
<body>
<s:property value="point" />
<s:property value="userName" />
<s:property value="age" />
<s:property value="birthday" />
</body>
</html>
四、自定义bean的转换器
1.继承自DefaultTypeConverter
package com.tao.struts2.bean;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
@SuppressWarnings("unchecked")
@Override
public Object convertValue(Map context, Object value, Class toType) {
if (Point.class == toType) {
String[] params = (String[]) value;
String[] paramValues = params[0].split(",");
Point point = new Point();
point.setX(Integer.parseInt(paramValues[0]));
point.setY(Integer.parseInt(paramValues[1]));
return point;
} else if (String.class == toType) {
Point point = (Point) value;
return new String("[x=" + point.getX() + ", y=" + point.getY()
+ "]");
}
return super.convertValue(context, value, toType);
}
}
2.继承自StrutsTypeConverter
package com.tao.struts2.bean;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
@SuppressWarnings("unchecked")
public class PointStrutsConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] value, Class toType) {
String[] paramValues = value[0].split(",");
Point point = new Point();
point.setX(Integer.parseInt(paramValues[0]));
point.setY(Integer.parseInt(paramValues[1]));
return point;
}
@Override
public String convertToString(Map context, Object value) {
Point point = (Point) value;
return new String("[x=" + point.getX() + ", y=" + point.getY()
+ "]");
}
}
五、配置转换器
1.局部的配置:在Action所在包下,Action类名-conversion.properties
point=com.tao.struts2.bean.PointConverter
2.全局的配置:在src(WEB-INF/classes)下,添加xwork-conversion.properties
com.tao.struts2.bean.Point=com.tao.struts2.bean.PointStrutsConverter
分享到:
相关推荐
### Struts2自定义类型转换:深入解析与实践 #### 引言 在Web开发中,数据类型转换是一项常见的需求,特别是在用户输入的数据与后端处理的数据类型不一致时。Struts2框架提供了强大的类型转换机制,允许开发者...
### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...
3. **处理日期格式**:在自定义转换器中,我们需要解析前端传递的日期字符串并转换为Date对象。这通常涉及到日期格式化。可以使用`SimpleDateFormat`类来完成这个任务。 ```java try { SimpleDateFormat formatter...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括MVC设计模式的实现、类型转换、国际化、拦截器等。在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理...
Struts2通过内置的类型转换器和自定义转换器来解决这个问题。默认情况下,Struts2提供了一系列内建的转换器,如IntegerTypeConverter、FloatTypeConverter和DateTypeConverter等,它们能够自动将请求参数转换为相应...
Struts2作为一款流行的Java Web框架,其在处理用户输入数据时扮演着重要角色。...在练习中,你可以尝试创建不同的自定义转换器,并理解它们在处理不同类型数据时的作用,从而加深对Struts2数据处理机制的理解。
自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....
接着,当Struts2接收到相关参数时,会自动调用自定义转换器进行转换。 6. **调试与测试** 调试自定义类型转换器通常涉及到设置断点,观察转换过程中的变量状态,以及通过单元测试确保转换逻辑的正确性。在IDE如...
本实例练习旨在帮助你深入理解Struts2的工作原理,特别是自定义类型转换和拦截器的使用。 首先,让我们详细探讨Struts2的MVC架构。在MVC模式中,Model代表业务逻辑,View负责展示数据,而Controller则是两者之间的...
标签中的“源码”可能意味着博客会深入到Struts2框架的源代码中,解释类型转换器的工作原理和如何根据源代码实现自定义转换器。而“工具”可能指的是使用Struts2提供的工具类或API来辅助类型转换。 在`Struts2_3500...
理解并掌握如何利用内置转换器、自定义转换器以及处理转换错误,对于构建高效、稳定的Struts2应用至关重要。通过深入学习Struts2的源码和使用相关工具,我们可以更深入地了解这些机制,并优化我们的应用程序。
Struts2是一个强大的MVC框架,它在处理用户请求时涉及到数据类型的转换,这在处理复杂的表单数据或者自定义对象时尤其重要。本篇文章将详细介绍如何在Struts2中进行配置与自定义类型转换。 首先,Struts2的配置主要...
通常,Struts2框架内置了一些基本类型的转换器,但有时我们需要对特定的数据类型进行自定义转换,这时就需要编写自定义的转换类。下面将详细讲解如何在Struts2中实现自定义转换类。 首先,了解Struts2的转换机制。...
3. **xwork-2.1.2-sources.jar**: 这个文件包含了XWork的核心源代码,XWork是Struts 2的基础框架,提供了一套动作调度和类型转换机制。`FilterDispatcher`虽然在Struts 2中使用,但它的许多功能依赖于XWork库。 4. ...
Struts2是一个非常流行的Java Web框架,它极大地简化了MVC(模型-视图-控制器)应用程序的开发。在Struts2中,类型转换是一项关键功能,它...同时,自定义转换器也使得Struts2能够适应各种复杂的数据类型和业务场景。
Struts2是一个流行的Java web开发...总之,Struts2的类型转换机制为开发者提供了强大的灵活性和便利性,不仅可以处理基本类型,还能方便地扩展以支持自定义类型和复杂数据结构的转换,从而简化了Web应用的开发工作。
### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型转换类型 在Struts2框架中,类型转换是处理用户输入数据时的一个关键环节。Struts2支持多种内置的数据类型转换,同时也允许开发人员自定义类型转换...
2. 在struts.xml配置文件中定义`<global-converters>`或`<package>`级别的`<converters>`元素,添加自定义转换器。 此外,Struts2还提供了`ConversionError`接口,用于处理转换失败的情况。当转换失败时,我们可以...
在这个"struts2简单实例(类型转换)"中,我们将探讨Struts2如何处理不同类型的数据转换,以及如何创建一个简单的演示应用。 首先,让我们理解什么是类型转换。在Web应用程序中,用户通过表单提交的数据通常是字符...