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实现长连接(含心跳检测Demo)

    下面是“JAVA实现长连接(含心跳检测Demo)”的完整攻略。 1.什么是长连接? 长连接是指在TCP/IP连接中,长时间保持连接状态的一种网络通信方式。通常情况下,在客户端与服务器建立连接之后,即使在没有数据交互的情况下也保持连接状态。 相对于短连接,长连接的优势在于可以减少建立连接的开销,降低网络的负载,提高服务器的负载能力。 2.如何实现长连接? 实现…

    Java 2023年5月19日
    00
  • 深入了解JAVA泛型

    深入了解JAVA泛型 什么是Java泛型? Java泛型是JDK1.5中引入的一个强大的编程概念,它使得我们可以在编译期间有类型安全的访问集合等数据结构,避免了在编译期之后产生的类型转换异常等问题。 泛型的用法 Java泛型主要分为以下几个部分: 1.泛型类 我们可以使用泛型类来创建一个支持泛型的类,泛型类的形式如下: class MyGeneric<…

    Java 2023年5月26日
    00
  • Java实战之校园外卖点餐系统的实现

    Java实战之校园外卖点餐系统的实现攻略 本次攻略将介绍如何用Java实现一个校园外卖点餐系统。本系统涵盖了用户注册登录、商家上传餐品、用户下单、商家接单等功能。 思路分析 用户注册登录:用户需要填写基本信息,通过验证后才能注册成功。注册成功后,用户可以用自己的账号密码进行登录。 商家上传餐品:商家需要填写餐品名称、价格、描述和图片等信息,上传后用户可以浏览…

    Java 2023年5月24日
    00
  • Spring 校验(validator,JSR-303)简单实现方式

    实现一个完整的表单校验是 Web 应用中非常重要的组成部分。Spring 框架提供了校验的功能,它支持 JSR-303 规范和 Spring Validator 接口两种校验方式。本文将为大家介绍 Spring 校验的简单实现方式。 JSR-303 校验方式 下面将演示一个基于 JSR-303 规范实现的表单校验示例。 引入依赖 首先需要引入 Spring …

    Java 2023年5月19日
    00
  • 关于JAVA中stream流的基础处理(获取对象字段和对象批量处理等)

    以下是关于JAVA中stream流的基础处理的完整攻略: 1. Stream概述 Stream是JAVA 8中新增的一个API,定义在Java.util.stream中。与I/O中的字节与字符的input与output流不同,Stream是操作集合和数组的高级抽象。Stream支持函数式编程,可以方便地通过filter、map、reduce等操作快速分析、处…

    Java 2023年5月26日
    00
  • 一文吃透 Spring 中的 AOP 编程

    一文吃透 Spring 中的 AOP 编程 什么是 AOP AOP(Aspect Oriented Programming)即面向切面编程。与 OOP(面向对象编程)不同,AOP 不是关注代码的对象,而是关注在程序运行过程中“特定点”发生的一些处理。其主要作用是在不修改原有逻辑的情况下,对程序进行一些扩展操作,例如:日志记录、性能监控、事务管理等。 Spri…

    Java 2023年5月19日
    00
  • 使用Ajax实现简单的带百分比进度条实例

    使用Ajax实现简单的带百分比进度条实例 在Web开发中,经常会遇到需要上传大文件或发送复杂请求的情况,此时通常会借助Ajax实现异步上传或异步请求,提高用户体验。而在这个过程中,我们通常会通过进度条来展示任务的进度情况。在本篇文章中,我们将介绍如何使用Ajax实现简单的带百分比进度条实例。 实现步骤 以下是实现带百分比进度条的基本步骤: 创建一个进度条元素…

    Java 2023年6月15日
    00
  • POI通用导出Excel(.xls,.xlsx)的方法

    当我们需要将数据导出为Excel文件时,利用Apache POI这个强大的Java API可以快速简便地完成。以下是POI通用导出Excel(.xls,.xlsx)的方法攻略。 引入依赖 首先需要在Maven中引入POI的依赖: <dependency> <groupId>org.apache.poi</groupId> …

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