struts2中一个表单中提交多个请求的例子(多个提交按钮)

在struts2中实现一个表单中提交多个请求的例子,常见的方法是使用多个提交按钮,每个按钮对应一个请求。以下是详细的步骤:

1. 编写表单

首先在jsp页面中编写表单,并使用<s:submit>标签来生成提交按钮。每个不同的提交按钮会绑定不同的请求。例如:

<s:form action="processForm">
  <!-- 表单输入框等元素 -->
  <s:submit name="submitType" value="Save"/>
  <s:submit name="submitType" value="Update"/>
</s:form>

上述表单中有两个提交按钮,它们的name属性都为submitType,但是它们的value属性分别为SaveUpdate。这意味着在提交表单时,会根据按钮的value属性来判断用户到底选择了哪个按钮。这个值会被作为请求参数带到processForm这个action中。

2. 编写Action

在struts2中,可以在Action中使用@Action注解来指定这个Action对应的请求路径。同时可以使用@Result注解来指定请求成功后需要转到哪个页面。

在本例中,需要处理两个不同的请求,所以需要在Action中编写两个方法,分别对应这两个请求。例如:

@Action(value = "processForm", results = {
  @Result(name = "save", location = "/success-save.jsp"),
  @Result(name = "update", location = "/success-update.jsp")
})
public String processForm() {
  String submitType = getSubmitType();
  if (submitType.equals("Save")) {
    // 处理Save请求的代码
    return "save";
  } else if (submitType.equals("Update")) {
    // 处理Update请求的代码
    return "update";
  } else {
    return ERROR;
  }
}

// 使用@SkipValidation注解可以跳过表单校验
@Action(value = "cancelForm", results = {@Result(name = "success", location = "/cancel.jsp")})
@SkipValidation
public String cancelForm() {
  // 处理Cancel请求的代码
  return SUCCESS;
}

上述代码中,processForm方法对应表单的提交请求,根据提交按钮的值来判断需要执行哪个处理逻辑,然后返回对应的结果页面。cancelForm方法对应另外一个请求,它的@SkipValidation注解可以跳过表单校验。

3. 编写验证器

如果需要对表单进行约束和校验,还需要配置struts2的表单验证器。在本例中,可以使用@Validations注解来指定需要的校验规则。

例如,以下代码指定了一个名为processForm的校验规则,它要求必须有一个名为username的非空字符串。

@Validations(
  requiredStrings = {@RequiredStringValidator(fieldName = "username", message = "Username is required")}
)

示例1:增删改示例

下面给出一个完整的增删改的示例,使用struts2中一个表单中提交多个请求的方式实现。假设有一个用户管理的应用,可以通过表单来新增、修改或者删除用户。

  1. JSP页面

创建一个包含三个提交按钮的JSP页面:

<s:form action="processForm">
  <s:textfield name="username" label="Username"/>
  <s:textfield name="password" label="Password"/>
  <s:textfield name="email" label="Email"/>

  <s:submit name="submitType" value="Create"/>
  <s:submit name="submitType" value="Update"/>
  <s:submit name="submitType" value="Delete"/>
</s:form>
  1. Action

在Action中定义三个方法,分别对应Create、Update和Delete请求:

@Action(value = "processForm", results = {
  @Result(name = "success-create", location = "/success-create.jsp"),
  @Result(name = "success-update", location = "/success-update.jsp"),
  @Result(name = "success-delete", location = "/success-delete.jsp")
})
public String processForm() {
  String submitType = getSubmitType();

  if (submitType.equals("Create")) {
    // 处理创建用户的逻辑
    return "success-create";
  } else if (submitType.equals("Update")) {
    // 处理更新用户的逻辑
    return "success-update";
  } else if (submitType.equals("Delete")) {
    // 处理删除用户的逻辑
    return "success-delete";
  } else {
    return ERROR;
  }
}
  1. 验证器

定义一个Validations注解,要求表单的username字段和password字段必须有值:

@Validations(
  requiredStrings = {
    @RequiredStringValidator(fieldName = "username", message = "Username is required"),
    @RequiredStringValidator(fieldName = "password", message = "Password is required")
  }
)

通过以上配置,当用户点击不同的提交按钮时,struts2框架会将请求参数中的submitType值传递到前端控制器中,根据不同的值会转向到相应的方法中,最终实现三个不同的用户处理逻辑。

示例2:多语言切换

假设我们的应用需要支持多国语言,通过表单提交不同的语言选择来进行切换。

  1. JSP页面

创建一个带有三个提交按钮的表单页面:

<s:form action="changeLanguage">
  <s:submit name="submitType" value="English"/>
  <s:submit name="submitType" value="Chinese"/>
  <s:submit name="submitType" value="Spanish"/>
</s:form>
  1. Action

在Action中定义一个方法,判断请求是哪个按钮被点击,然后根据点击的按钮选择对应的语言,存储到ActionContext中:

@Action(value = "changeLanguage", results = {@Result(name = "success", location = "/index.jsp")})
public String changeLanguage() {
  String submitType = getSubmitType();
  String language;

  if (submitType.equals("English")) {
    language = "en_US";
  } else if (submitType.equals("Chinese")) {
    language = "zh_CN";
  } else if (submitType.equals("Spanish")) {
    language = "es_ES";
  } else {
    language = "en_US";
  }

  ActionContext.getContext().setLocale(new Locale(language));

  return SUCCESS;
}
  1. 配置文件

在struts.xml文件中,需要增加如下代码,指定默认的语言设置:

<constant name="struts.locale" value="en_US"/>

通过以上配置,在点击按钮后,struts2框架会根据请求参数中的submitType值转到相应的方法中,然后根据按钮的值选择对应的语言,存储到ActionContext中,最终实现多语言切换的功能。

以上两个示例都说明了如何在struts2中实现一个表单中提交多个请求的例子,如何根据请求参数中的按钮值,转到相应的处理方法中,以及如何根据不同的请求返回不同的结果页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2中一个表单中提交多个请求的例子(多个提交按钮) - Python技术站

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

相关文章

  • dl、dt、dd 标记来改造163邮箱的广告条

    如果想要改造网页上的广告条,可以使用HTML中的dl、dt、dd标记来达到目的。下面是详细的攻略: 1.使用dl、dt、dd标记 dl标记用于定义一个描述列表(description list),dt标记用于定义列表项中的项目名称(即定义术语或名称),dd标记用于定义项目的描述。可以使用这些标记分别定义广告条的标题、说明和一个链接。 2.示例一 下面是一个针…

    Java 2023年6月15日
    00
  • jsp内置对象

    一、什么是jsp内置对象 JSP(JavaServer Pages)内置对象是指在JSP页面中可以直接使用的特定对象,它们被JSP容器创建和初始化,用于向开发人员提供对其环境的访问。JSP内置对象是Java语言的一个重要的保留成分,通过使用内置对象可以简化JSP开发过程,同时也能够提高程序的运行效率。 二、jsp内置对象的分类 JSP内置对象分为9种,具体如…

    Java 2023年6月15日
    00
  • Java实现文件及文件夹的删除

    当需要删除一个文件或文件夹时,我们可以使用Java中的File类的delete()方法来完成。本文将详细讲解Java实现文件及文件夹的删除的完整攻略。 删除文件 删除文件的过程非常简单,只需要创建一个File对象,然后调用delete()方法即可。 示例代码: File file = new File("path/to/file"); i…

    Java 2023年5月19日
    00
  • Spring security登录过程逻辑详解

    我将详细讲解“Spring security登录过程逻辑详解”的攻略。具体内容如下: 标题 Spring security登录过程逻辑详解 介绍 Spring Security是基于Spring的安全框架,提供了认证和授权的功能,是保障应用系统安全的重要组成部分。本文将详细介绍Spring Security的登录过程,并结合代码示例进行演示。 正文 Spri…

    Java 2023年5月20日
    00
  • 剑指Offer之Java算法习题精讲数组查找与字符串交集

    剑指Offer之Java算法习题精讲 – 数组查找与字符串交集 一、本章介绍 本章将会对“剑指Offer”系列书籍中有关数组查找与字符串交集的核心算法习题进行总结和分析。我们将会结合具体的算法样例进行讲解,并且会针对其中涉及到的算法思想与编程技巧进行加深细致的探讨。 二、数组查找 1. 二维数组中的查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增…

    Java 2023年5月19日
    00
  • Java实现画图的详细步骤(完整代码)

    下面是Java实现画图的详细步骤(完整代码)的攻略。 一、准备工作 首先,要创建一个窗口来显示画布。这可以通过Java中的Swing库来实现。代码如下: import javax.swing.*; import java.awt.*; public class DrawingPanel extends JPanel { public DrawingPanel…

    Java 2023年5月18日
    00
  • Java中输出字符的ASCII值实例

    下面是详细的“Java中输出字符的ASCII值实例”的攻略。 1. 什么是ASCII码 首先我们需要了解,ASCII码是美国信息交换标准代码(American Standard Code for Information Interchange)的缩写,是一个基于26个英文字母的编码系统,用于在计算机和其他设备之间传输文本信息和二进制数据。大多数现代计算机编程…

    Java 2023年5月26日
    00
  • 解决mybatis plus字段为null或空字符串无法保存到数据库的问题

    当使用MyBatis Plus插件时,我们有时会遇到将空字符串或null值保存到数据库的问题。这是因为MyBatis Plus默认情况下忽略了这些值。解决这个问题的一种方法是使用注解@TableField来告诉MyBatis Plus要保存这些值。 下面是具体的攻略: 1. 使用注解@TableField保存空字符串 可以在实体类的属性上添加@TableFi…

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