一篇文章搞定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日

相关文章

  • 详解Java向服务端发送文件的方法

    详解Java向服务端发送文件的方法 在Java编程中,我们经常需要向服务端发送文件,比如我们需要上传用户的头像、简历等等。本文将详细讲解Java向服务端发送文件的方法。 1. 使用Java中的URLConnection发送文件 Java中的URLConnection类可以用来向服务端发送文件。下面是示例代码: import java.io.File; imp…

    Java 2023年5月19日
    00
  • 如何使用JDBC连接数据库并执行SQL语句

    下面是如何使用JDBC连接数据库并执行SQL语句的完整攻略: 一、引入JDBC驱动 在Java程序中使用JDBC(Java DataBase Connectivity)需要先引入JDBC驱动。不同的数据库所对应的驱动不同,这里以MySQL为例: <!– 在项目的pom文件中添加MySQL驱动的依赖 –> <dependency> …

    Java 2023年5月20日
    00
  • 详解spring boot jpa整合QueryDSL来简化复杂操作

    下面我来为你详细讲解“详解spring boot jpa整合QueryDSL来简化复杂操作”的完整攻略。 什么是QueryDSL QueryDSL 是一个DSL query 框架,基于类型安全,可以使用 Java而非 SQL 来查询数据。它支持多种后端数据库,包括 MySQL,PostgreSQL 和 SQL Server。QueryDSL提供了一种比直接写…

    Java 2023年5月20日
    00
  • 分享Java性能调优的11个实用技巧

    首先,我们需要明确一下Java性能调优的目标:提高应用程序的处理能力、降低资源占用率、提高用户体验和稳定性。为达成此目标,我们可以使用以下11个实用技巧: 1.使用最新的JDK版本 尽可能地使用最新的JDK版本,因为它们通常具有更好的性能和更高效的垃圾回收器。 2.使用本地变量 使用本地变量可以减少对垃圾回收器的压力,因此可以提高性能。例如,可以将对象引用存…

    Java 2023年5月26日
    00
  • Apache Maven3.6.0的下载安装和环境配置(图文教程)

    下面我会详细讲解 “Apache Maven3.6.0的下载安装和环境配置(图文教程)” 的完整攻略,包括安装步骤和环境配置。 下载Apache Maven 3.6.0 首先,我们需要到maven的官方网站 https://maven.apache.org/download.cgi 下载 Maven 3.6.0 的安装包。 根据您的操作系统下载相应的安装包,…

    Java 2023年5月20日
    00
  • Java中的Native方法

    Java中的Native方法:完整攻略 理解Native方法 JNI(Java Native Interface)可以让Java应用程序在运行时,与C/C++语言编写的函数进行交互。因为Java虚拟机(JVM)不能直接运行非Java代码, JNI支持调用Native方法,Native方法是一些用其他编程语言(如C/C++)编写的方法。 Native方法是指C…

    Java 2023年5月23日
    00
  • jquery zTree异步加载简单实例分享

    首先,让我们来了解一下什么是 jQuery zTree 以及异步加载。 jQuery zTree 是什么? jQuery zTree 是一款基于 jQuery 的树形视图插件,它具有结构清晰、功能强大和使用简便的特点。它可以帮助我们轻松实现一个树形结构的网页,比如分类列表、目录树、导航菜单等等。 异步加载是什么? 当我们需要渲染的树形结构数据较大时,如果一次…

    Java 2023年6月15日
    00
  • SpringMVC框架如何与Junit整合看这个就够了

    SpringMVC框架如何与Junit整合 本文将详细讲解如何使用Junit测试SpringMVC框架,并提供两个示例说明。 环境准备 在开始整合Junit和SpringMVC框架之前,我们需要准备以下环境: JDK 18或以上版本 Maven 3.6.3或以上版本 Tomcat 9.0或以上版本 Junit 5.7.2或以上版本 实现步骤 下面是整合Jun…

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