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

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

什么是类型转换

在Struts2中,类型转换是指将字符串类型的参数转换为控制器方法中所需要的具体类型,比如将字符串"100"转换为整数类型 int 100。

在Struts2中,参数的类型转换是由类型转换器完成的。

Struts2中的类型转换器

Struts2中属性值的类型转换是由类型转换器完成的,类型转换器实现了TypeConverter接口,其中常用的类型转换器有以下几种:

  1. StringTypeConverter:将String类型参数转换为字符串。
  2. BooleanTypeConverter:将String类型参数转换为boolean类型。
  3. IntegerTypeConverter:将String类型参数转换为Integer类型。
  4. DateTypeConverter:将String类型参数转换为Date类型。

通常情况下,Struts2中会自动匹配相应的类型转换器进行类型转换,但是有些情况下,我们需要自定义类型转换器。

自定义类型转换器

Struts2的类型转换器是基于ognl表达式引擎的,因此自定义类型转换器只需实现org.apache.struts2.util.StrutsTypeConverter接口,并在struts.xml中进行配置即可。

下面是一个示例,将字符串中的小写字母转换为大写字母:

public class UpperTypeConvertor implements StrutsTypeConverter {

    @Override
    public Object convertFromString(Map context, String[] values, Class toClass) {
        // 将字符串转换为大写字母
        if (String.class == toClass) {
            String str = values[0];
            return str.toUpperCase();
        }
        return null;
    }

    @Override
    public String convertToString(Map context, Object object) {
        // 将对象转换为字符串
        if (object instanceof String) {
            return String.valueOf(object);
        }
        return null;
    }
}

在struts.xml中配置自定义类型转换器

在struts.xml中,我们需要配置自定义类型转换器,以在Struts2应用程序中进行注册,示例如下:

<struts>
    <bean type="com.test.UpperTypeConvertor" name="upper"/>
    <constant name="struts.convention.action.fileProtocols" value="jar,vfsfile"/>
    <constant name="struts.convention.action.disableScanning" value="true"/>
    <package name="default" extends="struts-default">
        <action name="user" class="com.test.UserAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="upperInterceptor"/>
            <allowed-methods>login</allowed-methods>
            <conversion>
                <converter converter="upper" type="java.lang.String"/>
            </conversion>
        </action>
    </package>
</struts>

其中<bean type="com.test.UpperTypeConvertor" name="upper"/>用于声明并注册自定义类型转换器,name属性指定转换器名称。

<conversion>元素用于在Struts2中指定类型转换器,<converter>元素用于指定转换器名称及需要转换的类型。

示例一

下面是一个UserAction类,其中包含一个String类型的属性userName,我们需要将这个字符串属性转换为大写字母,具体代码如下:

public class UserAction extends ActionSupport {
    private String userName;

    // setter和getter方法省略
}

为了将字符串属性userName转换为大写字母,在struts.xml中需要进行如下配置:

<struts>
    <bean type="com.test.UpperTypeConvertor" name="upper"/>
    <constant name="struts.convention.action.fileProtocols" value="jar,vfsfile"/>
    <constant name="struts.convention.action.disableScanning" value="true"/>
    <package name="default" extends="struts-default">
        <action name="user" class="com.test.UserAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="upperInterceptor"/>
            <allowed-methods>login</allowed-methods>
            <conversion>
                <converter converter="upper" type="java.lang.String"/>
            </conversion>
            <param name="userName">Tom</param>
        </action>
    </package>
</struts>

在这个配置中,我们通过<param>元素将属性userName的初始值设为"Tom",然后通过自定义类型转换器UpperTypeConvertor将这个字符串转换为大写字母。

示例二

下面是另一个UserAction类,其中包含一个Calendar类型的属性birthday,我们需要将字符串类型的参数转换为Calendar类型,具体代码如下:

public class UserAction extends ActionSupport {
    private Calendar birthday;

    // setter和getter方法省略
}

为了将字符串类型的参数转换为Calendar类型,在struts.xml中需要进行如下配置:

<struts>
    <constant name="struts.convention.action.disableScanning" value="true"/>
    <constant name="struts.date.format" value="yyyy-MM-dd"/>
    <package name="default" extends="struts-default">
        <action name="user" class="com.test.UserAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
            <interceptor-ref name="defaultStack"/>
            <allowed-methods>login</allowed-methods>
            <conversion>
                <converter class="org.apache.struts2.util.StrutsTypeConverter" type="java.util.Calendar"/>
            </conversion>
            <param name="birthday">2021-12-12</param>
        </action>
    </package>
</struts>

在这个配置中,我们使用默认的类型转换器StringToCalendarConverter,它会将字符串类型转换为Calendar类型,通过<param>元素将属性birthday的初始值设为"2021-12-12"。此时,如果出现字符串格式不正确的情况,将会抛出类型转换异常。

以上就是一篇文章搞定Struts2的类型转换的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章搞定Struts2的类型转换 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 2023 年如何学习 SQL:初学者终极指南

    目录 什么是 SQL,它的用途是什么? SQL 在 2023 年仍然适用吗? 你应该学习 SQL 吗? 学习 SQL 的不同方法 SQL 入门 SQL初学者可能害怕问的问题学习 SQL 的先决条件是什么,我需要有任何编码经验吗?SQL 有哪些实际应用,哪些行业依赖于此技能?学习SQL需要多长时间,我应该投入多少时间练习才能熟练?有哪些流行的 RDBMS,我应…

    Java 2023年5月9日
    00
  • 深度优先与广度优先Java实现代码示例

    下面我来详细讲解一下“深度优先与广度优先Java实现代码示例”的攻略。 一、深度优先搜索 1. 简介 深度优先搜索(DFS)是一种经典的搜索方法,其基本思想是从一个起始状态开始,尽可能地遍历尽每一个可能到达的状态,直到搜索完所有的状态或者找到了一个目标状态。 2. 实现代码示例 下面是一个简单的深度优先搜索的Java实现代码示例: public void d…

    Java 2023年5月19日
    00
  • Mysql json类型字段Java+Mybatis数据字典功能的实践方式

    Mysql json类型字段Java+Mybatis数据字典功能的实践方式概述 Mysql支持json类型数据,在应用程序开发中,经常需要将json类型数据存储到数据库中。考虑到数据字典的实现方式,可以将字典数据以json的方式存储到Mysql数据库表中,Java+Mybatis数据字典功能是通过将json类型的数据解析出来,然后在应用程序中使用这些数据。 …

    Java 2023年5月20日
    00
  • SpringBoot快速整合Mybatis、MybatisPlus(代码生成器)实现数据库访问功能

    SpringBoot整合Mybatis 1.引入依赖 在pom.xml中引入以下依赖: <!– SpringBoot整合Mybatis依赖 –> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis…

    Java 2023年5月20日
    00
  • 如何在Spring中使用编码方式动态配置Bean详解

    下面我将详细讲解如何在Spring中使用编码方式动态配置Bean的攻略。 1. 概述 Spring框架的核心是IOC和AOP,其中IOC就是借助容器来实现对象的自动管理,而AOP则是通过切面编程实现对对象的增强。通常情况下,Spring通过XML或注解的方式配置Bean,但是在一些特殊场景下,需要动态的创建和管理Bean,这些场景比如: 根据配置文件动态生成…

    Java 2023年5月20日
    00
  • IDEA2019.3配置Hibernate的详细教程(未使用IDEA的自动化)

    下面就为你详细讲解“IDEA2019.3配置Hibernate的详细教程(未使用IDEA的自动化)”。 1. 下载Hibernate框架及其相关依赖 首先,要使用Hibernate框架,你需要先下载Hibernate框架及其相关依赖。可以从官方网站https://hibernate.org/orm/下载最新版的Hibernate框架。另外需要注意的是,Hib…

    Java 2023年5月19日
    00
  • Java点餐小程序之黑心商人

    Java点餐小程序之黑心商人完整攻略 简介 这是一款基于Java实现的点餐小程序,允许用户查看、点餐、结算等操作,并包含了“黑心商人”功能,允许商家设置并收取“加急费”、“删单费”等不合理费用。作为一名程序员,我们应该注重代码的质量,不容忍这种黑心商业行为,本文将详细讲解该小程序的实现过程,并提供几条防止黑心商户的方法。 整体思路 该小程序主要分为前台用户界…

    Java 2023年5月23日
    00
  • Java UrlRewriter伪静态技术运用深入分析

    Java UrlRewriter是一种伪静态技术,可以将动态的URL转换成有意义的静态URL。要使用这种技术,需要先在网站的服务器上安装UrlRewriter组件,并对组件进行配置。以下是Java UrlRewriter伪静态技术运用的深入分析攻略: 使用Java UrlRewriter的好处 使用Java UrlRewriter的好处是,可以提高网站SEO…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部