struts2 自定义类型转换

本文介绍如何在 Struts2 框架中实现自定义类型转换器,通过实例演示了如何将前端传来的名_姓格式字符串转换为 Java 对象,并在展示页面上呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


接下来就是我们自定义的类型转换器啦
Java代码
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:
Html代码
<%@ 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代码
<?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页面显示姓名信息


Html代码
/*** 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,内容如下
Java代码
example.bean.Name = example.converter.NameConverter
这样子的话,所有Name类型都会使用这个转换器进行类型转换
局部:在相应的Action目录下如NameAction的目录下,新建文件,文件名为:
Java代码
Action名-conversion.properties
如NameAction的文件名为:NameAction-conversion.properties
文件内容为:name(NameAction的属性名)=example.converter.NameConverter

[/list]

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

呵呵,这也算一个基本完整的struts2流程啦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值