一篇文章搞定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中如何执行xshell命令

    Java中可以使用Runtime和Process类来执行xshell命令,下面是详细步骤: 1.创建Runtime对象使用Java中Runtime类创建一个Runtime对象,这个对象提供了执行操作系统命令的方法。 Runtime runtime = Runtime.getRuntime(); 2.调用exec方法通过Runtime对象调用exec方法,可以…

    Java 2023年5月26日
    00
  • 什么是强引用?

    强引用是指在代码中通过变量名来引用一个对象,这个引用会使得对象的引用计数 +1,因此只要有强引用存在,对象就不会被垃圾回收器回收。 在实际的开发中,如果使用强引用过度,会导致内存泄漏的问题,因此我们需要尽可能减少对强引用的使用。 下面是解释如何在代码中使用强引用的攻略: 使用强引用 在代码中使用强引用非常简单,只需要定义一个变量,然后将其初始化为要引用的对象…

    Java 2023年5月10日
    00
  • Java 数据库连接池 Tomcat介绍

    下面开始对“Java 数据库连接池 Tomcat介绍”的攻略进行详细讲解。 一、什么是数据库连接池 在应用中,每次向数据库请求都会建立一个与数据库的连接。但是频繁地打开和关闭连接会给数据库服务器带来额外的负荷,造成系统性能下降。而使用连接池技术,可以在应用启动时就预先创建一组数据库连接,放入连接池中。当需要使用数据库连接时,就从连接池中取出一个连接,使用完后…

    Java 2023年6月2日
    00
  • Java分层概念详解

    Java分层概念详解 什么是分层概念? 分层概念是软件架构中一种重要的设计思想,它将整个系统按照功能划分为多个不同的层次,每一层都有不同的工作职责和业务逻辑。每一层都可以独立进行开发和测试,而不会影响其他层的功能。同时,各个层之间通过接口交互数据,从而使得整个系统更加稳定、可靠、易于维护和升级。 一个标准的分层体系应该包含以下几个层次: 表现层(Presen…

    Java 2023年5月20日
    00
  • Java异或技操作给任意的文件加密原理及使用详解

    Java异或技操作给任意的文件加密原理及使用详解 异或操作和其原理 异或操作(XOR)是一种二进制运算,将两个数的对应位进行比较,不同为1,相同为0。例如,对于8位二进制数10110101和01101110进行异或操作,得到11011011。 异或操作的原理在于其对于同一个数进行两次异或操作,其值不变。即 a xor b xor b = a。因此,可以借助异…

    Java 2023年5月26日
    00
  • RateLimit-使用guava来做接口限流代码示例

    为保护服务器的正常运行和客户端的正常使用,我们需要对接口进行访问限制。本文介绍了使用Guava RateLimit实现接口限流的代码示例。 Guava RateLimit简介 Guava是由Google开发的Java类库,其中包含了RateLimiter类,可用于接口限流。RateLimiter可以用于限制一定时间内的请求频率,比如每秒钟只能处理10个请求。…

    Java 2023年5月19日
    00
  • 微信公众号服务号推送模板消息设置方法(后端java)

    下面是详细的攻略: 微信公众号服务号推送模板消息设置方法 开启模板消息功能 要使用模板消息功能,首先需要在公众号后台开启该功能。具体操作步骤如下: 登录公众号后台,在左侧菜单栏中选择“开发者工具”。 点击页面上方的“接口权限”选项卡,找到“模板消息”并开启该功能。 开启模板消息功能后,需要到“模板消息”选项中添加至少一个消息模板。在添加模板时需要提供模板的标…

    Java 2023年5月20日
    00
  • MyBatis通过JDBC数据驱动生成的执行语句问题

    MyBatis通过JDBC数据驱动生成的执行语句问题解析 在Mybatis框架中,我们可以通过配置SQL语句或者使用Mapper接口来实现对数据的操作。不过在执行SQL语句的过程中,我们有时会遇到被JDBC驱动转换的问题。例如在进行数值计算时,可能会出现类型转换错误。本文将详细讲解如何解决这些问题。 JDBC驱动生成的执行语句 当使用MyBatis进行数据操…

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