struts2 自定义类型转换器

xiaoxiao2022-06-13  35

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流程啦 相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-4936208.html

最新回复(0)