`

struts2 自定义类型转换器

阅读更多
struts2 已经为我们提供了几乎所有的primitive类型以及常用类型(如Date)的类型转换器,我们也可以为我们自己的类型添加转换器,struts2为我们提供了一个类型转换器的接口:org.apache.struts2.util.trutsTypeConverter,这是一个抽象类,继承自ongl.DefaultTypeConverter,你也可以直接继承DefaultTypeConverter定义自己的转换器,但是strutsTypeConverter提供了更简单以及更好理解的方式,下面我们写一个自己的转换器:这个转换器的用处是把姓名转换成一个姓和名的类型,前端的输入为"名_姓"如:chengbao_zhu
Name 类如下:
package example.bean;

public class Name {
	private String firstName;
	private String familyName;

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getFamilyName() {
		return familyName;
	}

	public void setFamilyName(String familyName) {
		this.familyName = familyName;
	}

}


Action类
/*** NameAction.java ***/

package example.action;

import com.opensymphony.xwork2.ActionSupport;

import example.bean.Name;

public class NameAction extends ActionSupport{

	private Name name;
	
	@Override
	public String execute() throws Exception {
		return SUCCESS;//SUCCESS 是Action接口的一个常量"success"
	}

	public Name getName() {
		return name;
	}

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

}



接下来就是我们自定义的类型转换器啦
package example.converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import example.bean.Name;

public class NameConverter extends StrutsTypeConverter {

	/**
	 * 从String转换为自己的类型
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		Name name = new Name();
                  //这里我们用的分隔符为"_"
		String[] nameParams = values[0].split("_");

		String firstName = nameParams[0];
		String familyName = nameParams[1];

		name.setFirstName(firstName);
		name.setFamilyName(familyName);

		return name;
	}

	/**
	 * 从自定义的类型转换为String以供显示
	 */
	@Override
	public String convertToString(Map context, Object o) {
		Name name = (Name) o;

		String nameStr = "**" + name.getFirstName() + "_"
				+ name.getFamilyName() + "**";
		return nameStr;
	}

}


下面是输入页面name.jsp:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Input your name</title>
  </head>
  <body>
    <s:form action="nameConverter">
    <s:textfield name="name"></s:textfield>
    <s:submit value="提交改名"></s:submit>
    </s:form>
  </body>
</html>


配置struts.xml,struts.xml必需放在classpath下面
<?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="example" extends="struts-default">
		<action name="nameConverter" class="example.action.NameAction">
		<result name="success">/displayName.jsp</result>
		</action>	
</package>
</struts>
如果成功的话则会跳转到displayName.jsp页面显示姓名信息


/*** displayName.jsp 页面代码 **/
<%@ 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>Display</title>
  </head>
  <body>
  Your Name = <s:property value="name"/>
  </body>
</html>


至此,全部的基本配置已经完毕,接下来的问题是:如何让NameAction知道name属性要使用自定义的类型转换器呢,这里有两个方式:
[list=1]
  • 全局:在classpath下新建文件xwork-conversion.properties,内容如下
  • example.bean.Name = example.converter.NameConverter
    这样子的话,所有Name类型都会使用这个转换器进行类型转换
    
  • 局部:在相应的Action目录下如NameAction的目录下,新建文件,文件名为:
  • Action名-conversion.properties
    如NameAction的文件名为:NameAction-conversion.properties
    文件内容为:name(NameAction的属性名)=example.converter.NameConverter
    

    [/list]

    打开name.jsp输入 "chengbao_zhu" 程序会跳转到displayName.jsp并显示出下面的字符串:
    Your Name = **chengbao_zhu**
    

    呵呵,这也算一个基本完整的struts2流程啦
    分享到:
    评论

    相关推荐

      struts2自定义类型转换器

      然而,对于如Date这样的复杂类型,需要自定义转换器来处理。 创建自定义类型转换器的步骤如下: 1. **定义转换器类**:继承`org.apache.struts2.util.FieldConverter`或`...

      Struts自定义类型转换器

      ### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...

      Struts2自定义类型转换

      Struts2框架提供了强大的类型转换机制,允许开发者自定义类型转换器,以满足特定业务逻辑的需求。本文将深入探讨Struts2自定义类型转换的原理、分类以及具体实施步骤,帮助开发者更好地理解和应用这一功能。 #### ...

      struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例

      自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....

      struts2自定义类型转换、拦截器实例练习

      最后,编写自定义类型转换器和拦截器,将其添加到配置文件中。 在实践过程中,你将更深入地理解Struts2的工作流程,包括请求的分发、值栈的使用、以及Result的返回。此外,通过自定义类型转换和拦截器,你将能够...

      传智播客struts2.1源代码_自定义类型转换器

      接着,当Struts2接收到相关参数时,会自动调用自定义转换器进行转换。 6. **调试与测试** 调试自定义类型转换器通常涉及到设置断点,观察转换过程中的变量状态,以及通过单元测试确保转换逻辑的正确性。在IDE如...

      自定义类型转换器

      自定义类型转换器是当Struts2内置的转换器无法满足特定业务需求时,开发者自行创建的一种扩展方式。然而,这里提到的"自定义类型转换器"实际上与权限控制有关,而非类型转换。描述中的内容主要涉及的是如何实现用户...

      struts2自定义数据类型转换练习

      Struts2作为一款流行的Java Web框架,其在处理用户输入数据时扮演着重要角色。...在练习中,你可以尝试创建不同的自定义转换器,并理解它们在处理不同类型数据时的作用,从而加深对Struts2数据处理机制的理解。

      struts2数据类型转换器

      2. 在struts.xml配置文件中定义`&lt;global-converters&gt;`或`&lt;package&gt;`级别的`&lt;converters&gt;`元素,添加自定义转换器。 此外,Struts2还提供了`ConversionError`接口,用于处理转换失败的情况。当转换失败时,我们可以...

      struts2 类型转换器

      标签中的“源码”可能意味着博客会深入到Struts2框架的源代码中,解释类型转换器的工作原理和如何根据源代码实现自定义转换器。而“工具”可能指的是使用Struts2提供的工具类或API来辅助类型转换。 在`Struts2_3500...

      Struts的自定义转换器

      自定义转换器使得Struts框架更加灵活,能够处理复杂或特殊的数据类型,提高了代码的可维护性和用户体验。通过编写自定义转换器,开发者可以确保数据转换过程符合业务规则,减少因类型不匹配导致的错误。在实际开发中...

      struts2自定义编写转换类

      通常,Struts2框架内置了一些基本类型的转换器,但有时我们需要对特定的数据类型进行自定义转换,这时就需要编写自定义的转换类。下面将详细讲解如何在Struts2中实现自定义转换类。 首先,了解Struts2的转换机制。...

      Struts2 自定类型转换器(三十四)

      在自定义转换器类上使用`@ConversionProperties`注解,可以指定需要转换的属性及其配置。例如,我们可以设置属性的默认值,或者指定特定的转换规则。 4. **注册转换器** 转换器需要在Struts2框架中注册才能生效。...

      Struts 自定义转换器

      然而,对于更复杂的数据类型,或者需要特殊转换规则的情况,我们就需要创建自定义转换器。 创建自定义转换器的步骤如下: 1. **创建转换器类**:首先,你需要创建一个新的Java类,实现Converter接口。在这个类中,...

      Struts2之类型转换器的使用案例struts002

      本案例"Struts2之类型转换器的使用案例struts002"深入探讨了如何自定义类型转换器以及在实际应用中的使用。 首先,Struts2框架提供了一系列内置的类型转换器,可以自动处理基本类型和常见类型的数据转换,如String...

      Struts2学习教程之自定义类型转换器的方法

      Struts2的类型转换是基于OGNL实现的,因此自定义转换器需要实现这个接口。然而,TypeConverter接口的`convertValue`方法比较复杂,通常我们会选择继承`DefaultTypeConverter`类来简化工作。 `DefaultTypeConverter`...

      struts2的类型转换器授课教案和例子源码

      2. 注册转换器:有两种方式注册自定义转换器,一是通过XML配置文件,在`struts.xml`中指定`conversion.properties`文件,然后在该文件中声明转换器;二是通过注解`@Converter`直接在转换器类上标记。 在例子源码中...

    Global site tag (gtag.js) - Google Analytics