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+swing实现抖音上的表白程序详解

    Java+Swing实现抖音上的表白程序详解 介绍 本文介绍如何使用Java语言和Swing库实现一个类似于抖音表白程序的小程序。本文会对如何使用Java和Swing实现图形用户界面进行详细讲解,并提供代码示例,帮助初学者了解Java和Swing图形用户界面开发的基础知识。 准备工作 在开始之前,确保你已经安装好了Java开发环境和Swing库。如果尚未安装…

    Java 2023年5月19日
    00
  • Spring Boot整合Spring Security的示例代码

    下面是关于“Spring Boot整合Spring Security的示例代码”的完整攻略: 1. 创建Spring Boot项目 首先,在开始整合Spring Security之前,我们需要先创建一个基于Spring Boot的Web项目。可以使用Spring Initializr快速创建,也可以手动创建一个Spring Boot项目。这里我们以Sprin…

    Java 2023年5月20日
    00
  • Java语言通过三种方法实现队列的示例代码

    下面是关于“Java语言通过三种方法实现队列”的详细攻略: 一、队列的定义 在计算机科学中,队列是一种特殊的线性数据结构,它只允许在一端进行插入操作,在另一端进行删除操作。在队列中,进行插入操作的一端被称为队尾,进行删除操作的一端被称为队头。 二、常见的队列实现方法 实现队列的方法有很多,其中比较常见的包括: 1、使用数组实现队列 使用数组来实现队列,可以通…

    Java 2023年5月18日
    00
  • 一文彻底吃透SpringMVC中的转发和重定向

    一文彻底吃透SpringMVC中的转发和重定向 前言 Spring MVC 框架作为 Java 世界中非常流行的 Web 框架,是面试、工作必备技能之一。在 Spring MVC 中,转发和重定向是常用的两种请求转发方式。本文将通过代码示例,详细讲解 Spring MVC 中的转发和重定向的使用方式。 转发 转发是 Web 开发中非常常用的一种请求方式,它可…

    Java 2023年5月31日
    00
  • SpringBoot配置和切换Tomcat流程详解

    关于SpringBoot配置和切换Tomcat的流程,我来为您详细讲解。 1. SpringBoot 配置 Tomcat 的默认端口 SpringBoot默认使用的Tomcat端口是8080,可以通过在配置文件中配置server.port来修改端口号,例如设置为8090端口,只需要按照以下步骤操作: 打开配置文件application.properties或…

    Java 2023年6月2日
    00
  • 命令行编译和执行java代码

    虽然现在IDE很强大又很智能,但是平常随意写点练手的代码的时候,直接在命令行中使用vim和java命令更为方便快捷,可以做到无鼠标纯键盘的操作。 首先保证将java相关指令添加到了环境变量中; 1.编译class文件: javac -d ./ Test.java 编译好的class文件会放置到环境当前目录 (./)中。-d命令的作用是:如果在java文件中定…

    Java 2023年5月4日
    00
  • Java C++题解leetcode856括号的分数

    下面我将为你详细讲解“Java C++题解leetcode856括号的分数”的完整攻略。 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 * A 分,其中 A 是平衡括号字符串。 示例1: 输入: "()" 输出: 1…

    Java 2023年5月20日
    00
  • 消息推送平台的实时数仓?!flink消费kafka消息入到hive

    大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。 上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了,austin常规的功能已经更新得差不多了,剩下的就是各种细节的完善。 不知道大家还记不记得我当时规划austin时,所画出的架构图: 现在就剩下aus…

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