Struts2单选按钮详解及枚举类型的转换代码示例

Struts2单选按钮详解及枚举类型的转换代码示例

什么是单选按钮

单选按钮是一种常见的选项表单元素,通常用于让用户在多个选项中选择一个。在Struts2中,通过使用<s:radio>标签可以轻松地创建单选按钮,并且支持流行的UI框架,如Bootstrap和jQuery UI。

Struts2中的单选按钮标签

在Struts2中,单选按钮通过<s:radio>标签实现。这个标签有三个关键属性:

  • name:请求参数的名称
  • list:单选按钮选项的列表(可以是一个Map或者一个List)
  • value:默认选中的选项的值

下面是一个简单的示例,创建一个由两个单选按钮组成的表单:

<s:radio name="gender" list="{'Male', 'Female'}" value="Male"/> Male
<s:radio name="gender" list="{'Male', 'Female'}" value="Female"/> Female

这个示例创建了一个由两个单选按钮组成的表单,请求参数名称为gender,默认选中的选项是Male

枚举类型的转换

在实际开发过程中,有时候需要把枚举类型的值从请求参数中转换成对应的枚举类型。Struts2提供了一个方便的转换器,可以帮你完成这个过程。

例如,我们有一个枚举类型Gender,代表性别:

public enum Gender {
    MALE("M"), FEMALE("F");
    private String value;
    Gender(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
}

如果我们需要从一个单选按钮中获取性别信息,可以这样编写Action类:

public class ExampleAction extends ActionSupport {
    private Gender gender;
    public Gender getGender() {
        return gender;
    }
    public void setGender(Gender gender) {
        this.gender = gender;
    }
}

在Struts2的配置文件中需添加以下配置:

<constant name="struts.conversion.useDefaultTypeConverters" value="true"/>
<package name="example" namespace="/" extends="struts-default">
    <action name="submit" class="example.ExampleAction" method="execute">
        <result>/result.jsp</result>
    </action>
    <global-results>
        <result name="input">/index.jsp</result>
    </global-results>
    <interceptors>
        <interceptor-stack name="genderInterceptor">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="basicStack"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="params">
                <param name="excludeParams">\w*.(class|jar)</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="genderInterceptor"/>
    <type-conversion>
        <key-property>.*\.gender</key-property> <!-- 对名字以".gender"结尾的属性使用Gender类型转换器 -->
        <converter class="example.GenderConverter"/>
    </type-conversion>
</package>

可以看到在上述配置中,我们添加了一个type-conversion元素,它通过一个key-property元素指定了对哪些属性进行类型转换操作,并且指定了转换器的类名。这样,在向Action提交表单时,Struts2就会将请求参数中的值转换成对应的枚举类型。

下面是一个简单的GenderConverter实现,用于把请求参数转换成Gender枚举类型的值:

public class GenderConverter extends StrutsTypeConverter {
    @Override
    public Object convertFromString(Map context, String[] values, Class toType) {
        String value = values[0];
        if ("M".equals(value)) {
            return Gender.MALE;
        } else if ("F".equals(value)) {
            return Gender.FEMALE;
        } else {
            throw new TypeConversionException("Invalid value for Gender: " + value);
        }
    }
    @Override
    public String convertToString(Map context, Object o) {
        if (o instanceof Gender) {
            Gender gender = (Gender) o;
            return gender.getValue();
        } else {
            throw new TypeConversionException("Invalid type for Gender: " + o.getClass());
        }
    }
}

这个转换器很简单,它将请求参数中的值转换成对应的Gender枚举类型对象。注意,我们实现了convertToString()方法,这是因为任何类型转换器都必须同时支持从Java对象到字符串的转换。

示例1:使用Bootstrap样式的单选按钮

在实际开发中,经常需要使用样式更丰富的单选按钮。Bootstrap是一种非常流行的Web UI框架,提供了许多样式优美的组件,包括单选按钮。下面我们来演示如何在Struts2中使用Bootstrap样式的单选按钮。

首先,在Web项目中导入Bootstrap的CSS和JavaScript资源文件。然后,我们可以使用Bootstrap提供的CSS样式来美化我们的单选按钮:

<label class="radio-inline">
    <s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="M" cssClass="bootstrap"/>
    Male
</label>
<label class="radio-inline">
    <s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="F" cssClass="bootstrap"/>
    Female
</label>

在这个例子中,我们通过cssClass属性来指定单选按钮所使用的CSS样式,这样就可以使用Bootstrap提供的样式了。

示例2:使用jQuery UI样式的单选按钮

除了Bootstrap之外,还有其他一些流行的Web UI框架,如jQuery UI。如果你想为你的单选按钮选择jQuery UI的样式,该怎么做呢?

首先,在Web项目中导入jQuery UI的CSS和JavaScript资源文件。然后,在使用<s:radio>标签时,通过template属性来指定单选按钮的HTML模板:

<s:radio name="gender" list="{'M': 'Male', 'F': 'Female'}" value="M"
    template="<label for='s_gender_%{#attr.name}_%{#attr.list[#attr.status.index]}'>%{#attr.list[#attr.status.index]}<input type='radio' name='%{#attr.name}' value='%{#attr.list[#attr.status.index]}' id='s_gender_%{#attr.name}_%{#attr.list[#attr.status.index]}' class='ui-helper-hidden-accessible'></label>"/>

在这个例子中,我们通过template属性来指定单选按钮的HTML模板,通过ui-helper-hidden-accessible这个class来隐藏默认的单选按钮,然后使用label元素来模拟单选按钮并设置jQuery UI的相关样式。

总结

Struts2提供了强大的单选按钮支持,可以快速创建HTML表单,并且支持流行的UI框架。同时,Struts2还提供了方便的类型转换器,可以帮助我们将请求参数转换成对应的Java对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2单选按钮详解及枚举类型的转换代码示例 - Python技术站

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

相关文章

  • Java操作Excel的示例详解

    Java操作Excel的示例详解 在 Java 工程中,对 Excel 进行操作是一个比较常见的需求。下面将会详细讲解如何使用 Java 操作 Excel 文档。 前置条件 在开始操作 Excel 文件前,需要先将相应的依赖项添加到 Maven 或 Gradle 项目中: Maven 在 pom.xml 文件中添加以下依赖项: <dependency&…

    Java 2023年5月20日
    00
  • Java加载与存储指令之ldc与_fast_aldc指令

    Java加载与存储指令之ldc与_fast_aldc指令 在Java语言中,常数池是Java虚拟机处理的一个关键部分。Java字节码在运行时需要加载和存储常量来完成各种操作,Java指令集中就有专门用于加载常量到栈顶或将栈顶的常量存储到局部变量表中的指令。其中ldc指令用于加载常量,而_fast_aldc指令则用于快速加载常量。 ldc和ldc_w指令 ld…

    Java 2023年5月26日
    00
  • java的Hibernate框架报错“StaleStateException”的原因和解决方法

    当使用Spring Boot框架时,可能会遇到“OptimisticLockingFailureException”错误。这个错误通常是由于以下原因之一引起的: 数据库并发问题:如果多个用户同时访问同一条记录并尝试更新,则可能会出现此错误。在这种情况下,需要使用乐观锁或悲观锁来解决并发问题。 版本号不匹:如果您的实体类中的版本号与数据库中的版本号不匹配,则可…

    Java 2023年5月4日
    00
  • SpringBoot之如何正确、安全的关闭服务

    关于 Spring Boot 如何正确、安全地关闭服务,我们可以从以下几个方面进行讲解: 1. 常规 shutdown 操作 Spring Boot 提供了一种常规的 shutdown 操作,即在管理端点中使用 /actuator/shutdown 接口发送 POST 请求可以关闭应用程序。这种方式通常可以满足普遍需求,但也存在一定的缺点,比如潜在的安全隐患…

    Java 2023年5月20日
    00
  • Java之SpringBoot定时任务案例讲解

    下面是关于“Java之SpringBoot定时任务案例讲解”的完整攻略。 简介 在实际的项目中,我们时常需要定时执行一些任务,比如数据统计、数据备份、消息通知等。SpringBoot提供了很好的定时任务支持,本文将着重介绍如何使用SpringBoot实现定时任务,并提供两个示例。 步骤 1.依赖添加 在pom.xml文件中添加以下依赖: <depend…

    Java 2023年5月19日
    00
  • JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析

    JSON在Javascript中的使用是非常常见的操作,JSON是一种轻量级的数据格式,非常适合用于数据交互。在Javascript中,我们可以使用两种方式来解析JSON数据,一种是eval函数,另一种是JSON.parse方法。本篇文章将详细解析这两种方式的异同以及使用姿势。 eval函数 eval函数是Javascript中自带的函数,用于执行一段字符串…

    Java 2023年5月26日
    00
  • SpringBoot Kafka 整合使用及安装教程

    下面我来给你详细讲解“SpringBoot Kafka 整合使用及安装教程”的完整攻略。 1. 安装Kafka Kafka是一个开源的分布式流处理平台,它由Scala和Java编写而成。首先我们需要安装Kafka: 访问Kafka官网:http://kafka.apache.org/downloads 选择Kafka的版本,推荐使用最新版本 解压下载好的文件…

    Java 2023年5月20日
    00
  • Java中synchronized正确使用方法解析

    Java中synchronized正确使用方法解析 什么是synchronized synchronized是一个对象级别的锁,也称之为内部锁或者特定对象的锁。Java中提供了三种使用synchronized关键字同步代码块的方法。 修饰实例方法,锁的是当前实例对象(this)。 修饰静态方法,锁的是类对象(Class对象)。 修饰代码块,锁的是代码块中的对…

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