`

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自定义类型转换器

      struts2 自定义类型转换器,实现一个对象转换成一个int 坐标值。

      Struts自定义类型转换器

      对于Struts1和Struts2中都讲到了自定义类型转换器。但是有些人可能对自定义类型转换器的运行原理不理解,这里进行简单介绍一下……

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

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

      自定义类型转换器

      Struts2自定义类型转换器 如果用户登陆后,可以访问Action中的所有方法,如果用户没有登陆,不允许访问Action中的方法。并且提示你没有权限执行该操作!

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

      myeclipse平台下使用struts2.3框架搭建实例,理解struts2工作原理,了解struts2自定义类型转换,自定义拦截器,掌握struts2的mvc框架应用

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

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

      Struts 自定义转换器

      Struts 自定义转换器Struts 自定义转换器

      Struts的自定义转换器

      Struts的自定义转换器 public class LineConvertor extends StrutsTypeConverter{...}

      struts2中的类型转换器

      对于基本数据类型 strus2可以自动的将其转换成所需要的类型,但是我们自己定义的引用数据类型无法转换,本文详细介绍了strus2的自定义类型转换器

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

      类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行...下面这篇文章主要给大家介绍了关于Struts2学习教程之自定义类型转换器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

      Struts2类型转换与输入校验 .zip

      (1) 编写一个自定义类型转换器,并基于应用程序进行全局配置,实现字符串参数与颜色值之间的转换,并将颜色值应用于视图当中。 (2) 根据实验四的图书管理系统,扩展图书新增功能,要求对新增页面表单中的每个...

      实验4 Struts2的类型转换与OGNL表达式语言.doc

      1、 理解Struts2的类型转换类型 2、 理解局部类型转换器与全局类型转换器的区别 3、 掌握Struts2的自定义类型转换 4、 理解OGNL表达式语言

      自定义struts时间转换器

      自定义的struts时间转换器,轻松实现java中时间的转换。

      一篇文章搞定Struts2的类型转换

      主要介绍了关于Struts2类型转换的相关资料,文中主要介绍了Struts2的类型转换器和自定义类型转换器的实现,有需要的朋友可以参考借鉴,下面来一起看看吧。

      struts2全局转换的问题

      测试源代码 博文链接:https://gyj129129.iteye.com/blog/225216

      自己写的struts2类型转换器

      服务器可以接收到的来自用户的数据只能是字符串或者是字符串数组,而在服务器上的对象中 ,这些数据往往有多种不同的类型,如日期(Date) 整数(int) 浮点数... 要实现 上述的转换 ,Struts2中 提供了 converter。

      struts2 详解文档

      自定义类型转换器 全局类型转换器 访问或添加几个属性 文件上传 多文件上传 自定义拦截器 对Action中所有方法进行输入校验 对Action指定方法进行校验 输入校验的流程 基于XML配置方式实现对action的所有...

      Struts2全解Struts2全解

      1、struts2概述 Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 2、简单的struts2程序 ...9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........

      Struts2 in action中文版

      5.4.3 配置框架使用自定义转换器 103 5.5 小结 106 第三部分 构建视图——标签和结果 第6章 构建视图——标签 108 6.1 入门 108 6.1.1 ActionContext和OGNL 109 6.1.2 虚拟对象ValueStack 111 6.2 Struts 2标签概要...

    Global site tag (gtag.js) - Google Analytics