Struts 2中自定义类型转换器 TypeConverter 的应用

0.建立项目

建立项目并使用myeclipse自带的工具配置Struts 2。我的项目名为Ex4
这里写图片描述

1.构造模型Tel类
package org.vo;

public class Tel {
    private String sectionNo;//区号
    private String telNo;//电话号
    public String getSectionNo() {
        return sectionNo;
    }
    public void setSectionNo(String sectionNo) {
        this.sectionNo = sectionNo;
    }
    public String getTelNo() {
        return telNo;
    }
    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }
}

2.编写界面converter2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>
    <title>converter2.jsp</title>
  </head>

  <body>
    <s:form action="typeconverter2" method="post">
        <s:textfield name="tel" label="输入电话"/>
        <s:submit value="提交"/>
    </s:form>
  </body>
</html>
3.编写控制器Action
package org.action;

import org.vo.Tel;

import com.opensymphony.xwork2.ActionSupport;

public class MyTypeConverterAction extends ActionSupport{
    private Tel tel;

    public Tel getTel() {
        return tel;
    }

    public void setTel(Tel tel) {
        this.tel = tel;
    }
    public String excute() throws Exception{
        return SUCCESS;
    }
}
4.配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" extends="struts-default">
        <action name="typeconverter2" class="org.action.MyTypeConverterAction">
            <result name="success">/show2.jsp</result>
        </action>
    </package>
</struts>    
5.实现类型转换器

(可以将输入的字符串[完整的电话],与字符串数组[电话与区号分割]相互转换)

package org.converter;

import java.util.Map;

import ognl.DefaultTypeConverter;

import org.vo.Tel;

public class MyTypeConverter extends DefaultTypeConverter{
    public Object convertValue(Map context,Object value,Class toType){
        if(toType==Tel.class){
            String[] str=(String[]) value;
            Tel t = new Tel();
            for(int i=0;i<str.length;i++){
                if(str[i].indexOf("-")>0){
                    String[] tels=str[0].split("-");
                    t.setSectionNo(tels[0]);
                    t.setTelNo(tels[1]);
                }
                else
                    return null;
            }
            return t;
        }else if(toType==String.class){
            Tel t=(Tel)value;
            return "["+t.getSectionNo()+"-"+t.getTelNo()+"]";
        }
        return null;
    }
}
6.注册类型转换器

文件MyTypeConverterAction-conversion.properties需与同Action放在同一个包下,内容为”变量名=包名.类名” 变量名是Action中转换的属性名,包名.类名指定要用的自定义类型转换器。

tel=org.converter.MyTypeConverter
7.编写转换后界面show2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>
    <title>show2.jsp</title>
  </head>

  <body>
    <s:property value="tel"/><br>
    区号:<s:property value="tel.sectionNo"/><br>
    号码:<s:property value="tel.telNo"/><br>

  </body>
</html>



一个简单的自定义类型转换器就写完了,使用tomcat 8发布项目后,在浏览器输 http://localhost:8080/Ex4/converter2.jsp,显示效果如下:
这里写图片描述
按上图输入后点击提交按钮则跳转显示
这里写图片描述



参考:
[1]郑阿奇.Java EE实用教程[M].北京:电子工业出版社,2015.2:86-89

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值