复选框和Struts2后台交互代码详解

我们来详细讲解“复选框和Struts2后台交互代码详解”的完整攻略。

1. 复选框怎么用?

1.1 HTML中的复选框

在HTML中,复选框是通过input标签来定义的,type属性的值为checkbox。

<input type="checkbox" name="rememberMe" value="true"> Remember me

复选框的name属性和值会一起提交给服务器,如果勾选了复选框,则name属性和value属性的值会作为一个键值对被提交到服务器中。

1.2 Struts2中如何获取复选框的值?

在Struts2中,可以通过在Action类中定义一个同名的boolean类型的属性来接收复选框的值。例如如下的代码:

public class LoginAction extends ActionSupport {
    private boolean rememberMe;

    public void setRememberMe(boolean rememberMe) {
        this.rememberMe = rememberMe;
    }

    // 其他属性和方法
}

在JSP页面中,要将复选框的值提交到Action中,需要将复选框的name属性设置为Action类中对应的属性名。例如,如果Action类中有一个叫做rememberMe的属性,则复选框的代码可以写成如下形式:

<input type="checkbox" name="rememberMe"> Remember me

这样在点击“提交”按钮时,Struts2框架会自动将复选框的值转换为boolean类型,并将其赋值给Action类中对应的属性。

2. Struts2后台交互代码详解

2.1 Action类的编写

在Action类中定义一个boolean类型的属性来接收复选框的值,然后可以在execute方法中处理提交的表单数据。

public class ExampleAction extends ActionSupport {
    private boolean rememberMe;

    public void setRememberMe(boolean rememberMe) {
        this.rememberMe = rememberMe;
    }

    public String execute() throws Exception {
        // 在这里处理提交的表单数据
        return SUCCESS;
    }
}

2.2 JSP页面的编写

在JSP页面中,通过input标签来定义复选框,name属性的值应该和Action类中定义的属性名称保持一致。

<s:form action="exampleAction">
    <s:checkbox name="rememberMe" label="Remember me" fieldValue="true"/>
    <s:submit/>
</s:form>

在这个例子中,我们使用了Struts2的标签库,并通过标签库的方式定义了复选框。label属性表示复选框的文本,fieldValue属性表示当复选框被选中时提交的值。

2.3 验证器的编写

如果需要对复选框的值进行验证,可以在Action类中使用Struts2的验证器来实现。例如:

public class ExampleAction extends ActionSupport {
    private boolean rememberMe;

    public void setRememberMe(boolean rememberMe) {
        this.rememberMe = rememberMe;
    }

    @Override
    public void validate() {
        if (!rememberMe) {
            addFieldError("rememberMe", "Please remember me");
        }
    }

    public String execute() throws Exception {
        // 在这里处理提交的表单数据
        return SUCCESS;
    }
}

在这个例子中,我们通过在validate方法中手动添加错误信息来验证复选框的值是否合法。如果复选框没有被选中,则添加一个fieldError。

3. 示例

3.1 示例1:判断用户是否勾选复选框

在这个示例中,我们需要让用户输入用户名和密码,并显示一个“Remember me”复选框。如果用户勾选了复选框,则在登录成功后会将用户名和密码记住。

Action类代码:

public class LoginAction extends ActionSupport {
    private String username;
    private String password;
    private boolean rememberMe;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setRememberMe(boolean rememberMe) {
        this.rememberMe = rememberMe;
    }

    public String execute() {
        if ("admin".equals(username) && "admin".equals(password)) {
            if (rememberMe) {
                // 将用户名和密码保存到Cookie中
                Cookie cookie1 = new Cookie("username", username);
                cookie1.setMaxAge(60 * 60 * 24 * 30); // 30 days
                Cookie cookie2 = new Cookie("password", password);
                cookie2.setMaxAge(60 * 60 * 24 * 30);
                ServletActionContext.getResponse().addCookie(cookie1);
                ServletActionContext.getResponse().addCookie(cookie2);
            }
            return SUCCESS;
        } else {
            addActionError(getText("error.login"));
            return ERROR;
        }
    }
}

JSP页面代码:

<s:form action="login">
    <s:textfield name="username" label="Username"/>
    <s:password name="password" label="Password"/>
    <s:checkbox name="rememberMe" label="Remember me" fieldValue="true"/>
    <s:submit/>
</s:form>

3.2 示例2:批量删除

在这个示例中,我们需要让用户勾选多个复选框,然后将勾选的复选框对应的数据删除。

Action类代码:

public class ExampleAction extends ActionSupport {
    private List<Integer> ids;

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    public String execute() throws Exception {
        // 删除所有选中的数据
        for (Integer id : ids) {
            deleteData(id);
        }
        return SUCCESS;
    }

    private void deleteData(Integer id) {
        // 删除数据的具体实现
    }
}

JSP页面代码:

<s:form action="exampleAction">
    <s:iterator value="list">
        <s:hidden name="ids" value="%{id}"/>
        <s:checkbox name="check" fieldValue="%{id}"/>
        <s:property value="name"/>
    </s:iterator>
    <s:submit/>
</s:form>

在这个例子中,我们使用了Struts2的迭代标签库来遍历数据列表,并将每一条数据的ID存储到一个隐藏的文本框中。当用户选中复选框时,这些隐藏文本框的值就会被上传到服务器端。在Action类中,我们定义了一个类型为List的属性来接收这些值,然后在execute方法中遍历这个列表,将其中的数据删除。

在以上两个示例中,我们通过HTML标签和Struts2标签来定义复选框,并通过Action类和JSP页面中的代码将它们连接起来。在第一个示例中,我们演示了如何将勾选状态保存到Cookie中;在第二个示例中,我们演示了如何删除多个数据。通过这些实例,我们可以深入了解复选框的使用方法,同时掌握Struts2框架中处理复选框的基本技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:复选框和Struts2后台交互代码详解 - Python技术站

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

相关文章

  • java自定义异常以及throw和throws关键字用法

    Java 自定义异常 Java 中有一些运行时异常是由Java自己设置的,但是在大多数情况下,程序员需要根据程序的需要自定义异常。在Java中可以通过继承Exception类或者RuntimeException类来自定义异常。 自定义异常类的继承结构: Throwable Exception RuntimeException 自定义异常类 示例: 假设有一个…

    Java 2023年5月27日
    00
  • 使用maven如何将项目中的test代码打包进jar中

    使用 Maven 将项目中的 test 代码打包进 jar 中,可以实现在发布项目时一并发布 test 代码,方便其他人也能进行测试。下面是具体的步骤: 在 pom.xml 文件中添加以下代码,指定将 test 代码打包进 jar 中: <build> <plugins> <plugin> <groupId>o…

    Java 2023年5月20日
    00
  • Java加密 消息摘要算法SHA实现详解

    Java 加密之消息摘要算法SHA256 实现详解 在这篇文章中,我们将详细介绍使用 SHA256 算法实现消息摘要的 Java 编程。本文将介绍什么是消息摘要算法、SHA256 算法的原理和用法,以及如何在 Java 中使用 SHA256 实现消息摘要。本文还提供了两个示例来演示如何使用 SHA256 算法。 什么是消息摘要算法? 消息摘要算法是简单的单向…

    Java 2023年5月19日
    00
  • 基于SpringBoot开机启动与@Order注解

    基于Spring Boot开机启动与@Order注解 在Spring Boot应用程序中,我们可以使用@Order注解来指定Bean的加载顺序。此外,我们还可以使用Spring Boot的开机启动功能,在应用程序启动时自动执行一些任务。本文将介绍如何使用@Order注解和开机启动功能。 @Order注解 @Order注解是Spring框架提供的一个注解,用于…

    Java 2023年5月15日
    00
  • java启动jar包将日志打印到文本的简单操作

    下面我来为您详细讲解如何通过 Java 启动 Jar 包并将日志打印到文本的简单操作攻略。 简介 在 Java 中,我们可以通过 log4j、logback 等成熟的日志框架来记录日志。而在启动 Jar 包时,如果想将程序运行过程中产生的日志打印到文本,可以在启动命令中加入 log4j 配置文件,并指定日志文件的输出路径。 操作步骤 1. 编写 log4j …

    Java 2023年5月26日
    00
  • 微信小程序是什么语言开发的 微信小程序的开发语言介绍

    微信小程序是一种轻量级应用(小程序),通过微信平台进行发布和使用。微信小程序的开发使用的主要语言是JavaScript,同时也支持HTML和CSS。 在微信小程序开发中,需要使用微信提供的基础库(WXML、WXSS和基于JavaScript的逻辑代码)来实现页面的设计和交互功能。同时,微信小程序也支持使用第三方框架进行开发,例如使用Vue.js框架进行开发。…

    Java 2023年5月23日
    00
  • 子线程任务发生异常时主线程事务回滚示例过程

    子线程任务发生异常时主线程事务回滚是一种常见的处理机制,下面我将为您提供一个完整的攻略来解释相关的过程。 首先,我们需要了解一些基本的知识点: 什么是子线程子线程就是在主线程之外启动的线程。子线程可以并行执行,无需等待主线程完成。 什么是主线程主线程是程序的入口,它负责启动并控制整个程序的执行流程。所有的子线程都是由主线程创建的。 什么是事务事务是一组相关的…

    Java 2023年5月26日
    00
  • Spring内置任务调度如何实现添加、取消与重置详解

    下面我来简单介绍一下Spring内置的任务调度的添加、取消与重置详解。 1. 添加任务 Spring内置的任务调度通过使用TaskScheduler和CronTask对象来完成任务的调度。下面是添加任务的步骤: 首先,在Spring的配置文件中配置一个TaskScheduler对象。可以使用ThreadPoolTaskScheduler或者Concurren…

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