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日

相关文章

  • Spring MVC的文件上传和下载以及拦截器的使用实例

    下面我将为您详细讲解“Spring MVC的文件上传和下载以及拦截器的使用实例”的完整攻略。 文件上传 准备工作 在Spring MVC中,文件上传使用MultipartResolver来解析multipart请求。一般情况下,我们可以使用Spring提供的CommonsMultipartResolver来完成解析。 需要在Spring的配置文件中进行以下配…

    Java 2023年6月15日
    00
  • Scala解析Json字符串的实例详解

    Scala解析Json字符串的实例详解 Scala是一种功能强大的编程语言,常用于处理大型、复杂的数据。解析Json字符串在数据处理中很常见,Scala通过多种库提供了解析Json的工具。本文将通过两个示例来详细讲解Scala解析Json字符串的实现方法。 示例1:使用Scala自带的Jackson库解析Json 在Scala中,可以使用自带的Jackson…

    Java 2023年5月26日
    00
  • Java实现读取TXT和CSV文件内容

    我将为您详细讲解如何使用Java实现读取TXT和CSV文件内容。 读取TXT文件内容 首先,我们需要使用Java的IO流读取文件内容。以下是一些实现的基本步骤: 创建File类实例,指定要读取的txt文件路径; 创建FileReader实例,参数为所创建File类实例; 创建BufferedReader实例,参数为所创建FileReader实例; 使用Buf…

    Java 2023年5月19日
    00
  • springboot的java配置方式(实例讲解)

    下面给出SpringBoot的Java配置方式的详细攻略: 1. 什么是Java配置方式? SpringBoot提供了三种配置方式:XML配置方式、注解配置方式和Java配置方式。Java配置方式是一种纯粹的编程式的方式,通过Java类的方式来完成Bean的配置,相比于XML和注解更加灵活。Java配置方式的主要思想就是用一个Java类替代了XML配置文件或…

    Java 2023年5月15日
    00
  • IntelliJ IDEA打开多个Maven的module且相互调用代码的方法

    IntelliJ IDEA是一款功能强大的Java开发工具,在开发过程中经常需要打开多个Maven的module且相互调用代码,下面将介绍具体操作步骤: 创建Maven module 首先,我们需要创建多个Maven module。 打开IntelliJ IDEA,点击File -> New -> Module,选择Maven,点击Next。 在…

    Java 2023年5月19日
    00
  • java使用poi导出Excel的方法

    下面是关于”Java使用POI导出Excel的方法”的完整攻略。 简介 POI是Apache基金会的开源项目,可以用Java编写程序生成Microsoft Office文档格式,包括Word、Excel和PowerPoint。POI能够读取和写入Microsoft Office文件的各种属性和内容。在本教程中,我们将学习如何利用POI将数据导出到Excel文…

    Java 2023年5月20日
    00
  • JSP servlet实现文件上传下载和删除

    下面是详细讲解”JSP Servlet实现文件上传下载和删除”的完整攻略。 一、实现文件上传 1.1 准备工作 在进行文件上传之前,我们需要先准备好上传文件的HTML表单和对应的服务器端处理代码。HTML表单中需要包含文件上传的相关信息。 通常,我们使用enctype=”multipart/form-data”来指定表单使用二进制传输数据,使用type=”f…

    Java 2023年6月15日
    00
  • Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包

    Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包 包 在Java中,包是用来管理和组织类的,可以避免类名重复和冲突。包名是由完整类名组成的,例如com.example.myapp。约定俗成的做法是让包名和域名一致。 如何定义包 在Java源代码的开头,使用package关键字来定义包,例如: package com.exa…

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