📜  Spring – MVC 表单单选按钮

📅  最后修改于: 2022-05-13 01:54:48.271000             🧑  作者: Mango

Spring – MVC 表单单选按钮

在这里,我们将了解Spring MVC的单选按钮和单选按钮标签。我们将在 Spring 工具套件 (STS) 中创建一个基本的 Spring MVC 项目,以使用form:radiobuttonform:radiobuttons标签创建单选按钮。

“spring-form.tld”标签库

  • 在 Spring Framework 中,我们可以使用Java Server Pages (JSP) 作为视图组件。从 2.0 版开始,Spring 提供了一套全面的数据绑定感知标签,用于在使用 JSP 和 Spring Web MVC 时处理表单元素。
  • spring 标签库中的每个标签都支持其对应的 HTML 标签对应的属性集,使标签使用起来熟悉且直观。
  • Spring 的表单标签库,即“ spring-form.tld ”与 Spring Web MVC 集成,使标签可以访问控制器处理的命令对象和引用数据。
  • 表单标签使 JSP 更易于开发、阅读和维护。
  • 例如:评估错误、设置主题、格式化输入和输出国际化消息的字段等。
  • 要使用这个库中的标签,我们需要在 JSP 页面的顶部添加以下指令:
HTML
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


HTML


HTML


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>




Welcome page


  
    

Welcome to GeeksforGeeks!

                                                                                                                                                                                                                                                                                                                    
Enter your name:
Are you looking for a job now?:
Do you have work experience?:
How many years of experience you have?:
Submit
    
          


Java
// Java Program to Illustrate Choice Class
  
package com.geek.app;
  
// Class
public class Choice {
  
    // Class data members
    private String name;
    private String job;
    private String experience;
    private String years;
  
    // Getter
    public String getName() { return name; }
  
    // Setter
    public void setName(String name) { this.name = name; }
  
    // Getter
    public String getJob() { return job; }
  
    // Setter
    public void setJob(String job) { this.job = job; }
  
    // Getter
    public String getExperience() { return experience; }
  
    // Setter
    public void setExperience(String experience)
    {
        this.experience = experience;
    }
  
    // Getter
    public String getYears() { return years; }
  
    // Setter
    public void setYears(String years)
    {
        this.years = years;
    }
}


Java
// Java Program to illustrate ChoiceController Class
  
package com.geek.app;
  
// Importing required classes
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
  
// Annotation
@Controller
  
// Class
public class ChoiceController {
  
    // Annotation
    @RequestMapping(value = "/")
  
    public String viewPage(Model model)
    {
        Choice choice = new Choice();
        model.addAttribute("choice", choice);
  
        return "choice";
    }
  
    // Annotation
    @ModelAttribute("experienceYears")
    public List experienceYears()
    {
        List years = Arrays.asList(
            "1-3 Years", "3-5 years", "Above 5 Years");
        return years;
    }
  
    // Annotation
    @RequestMapping(value = "/submit",
                    method = RequestMethod.POST)
    public String
    submit(@ModelAttribute("choice") Choice choice)
    {
        return "summary";
    }
}


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Summary page


  
    

Hello ${choice.name}!!

       Looking for a job:     ${choice.job}     
    Work experience:     ${choice.experience}     
    Years of experience:     ${choice.years}   


这里的形式是用于此库中标签的标签名称前缀。

“单选按钮”标签

'radiobutton' 是 spring-form.tld 库提供的标签之一。它呈现一个类型为“radio”的 HTML 'input' 标签。

HTML


“单选按钮”标签

'radiobuttons' 是 spring-form.tld 库提供的标签之一。它呈现多个“radio”类型的 HTML“输入”标签。

  • 通过将可用选项作为运行时变量传递,它将涉及绑定到相同属性但具有不同值的多个标记实例。
  • 我们可以将值作为 Array、List 或 Map 传递,其中包含“items”属性中的可用选项。
  • 如果您使用的是地图,地图条目键将用作值,地图条目的值将用作要显示的标签。

HTML


Spring MVC 应用程序

我们将创建下面的 Spring MVC 应用程序来学习如何使用单选按钮标签。

Spring MVC – 单选按钮示例

创建应用程序的步骤

  1. 在 Spring Tool Suite 中创建一个 Spring MVC 项目。
  2. 在 STS 中,根据开发人员选择创建项目时,它将下载所有必需的 maven 依赖项、*.jar、lib 文件,并提供嵌入式服务器。
  3. 下面是 Spring MVC 项目创建后的最终项目结构 *. Java和 *.jsp 文件。

项目结构

实现:要创建的文件如下:

  1. 选择。 Java – Bean 类 – 定义属性和属性的 getter/setter 方法。
  2. 选择控制器。 Java – 控制器类 – 处理用户请求并生成输出。
  3. choice.jsp – 与用户交互的 Jsp 文件以进行输入。
  4. summary.jsp – Jsp 文件,用于向用户显示处理后的输出。

A.文件:choice.jsp

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>




Welcome page


  
    

Welcome to GeeksforGeeks!

                                                                                                                                                                                                                                                                                                                    
Enter your name:
Are you looking for a job now?:
Do you have work experience?:
How many years of experience you have?:
Submit
    
          

这是应用程序启动时向用户显示的欢迎页面。如上所述,我们需要在 JSP 页面中包含指令“ http://www.springframework.org/tags/form ”才能使用 Spring 表单标签。在表单标签动作中,方法属性用于映射JSP页面提交时必须执行的控制器方法。 radiobutton 和 radiobuttons 标签有许多属性,如 id、path、cssStyle、dir、value、items 等。我们可以根据项目要求包含任意数量的属性。

在此示例中,我们使用以下属性,如下所示:

  1. path:指定需要绑定数据的属性的路径。在此示例中,我们使用了 path=”experience”,以便这两个值 - yes, no 将绑定到该路径。
  2. id:为属性提供唯一的 id。在这里,我们给定了值 id=”experienceYears”,所以显示在 radiobuttons 标签下的所有项目都有这个唯一的 id。由于列表中有 3 个项目,因此运行时相应项目值的 id 将提供为 experienceYears1、experienceYears2、experienceYears3。
  3. value:指定特定单选按钮的值。
  4. 标签:显示单选按钮的值的名称。
  5. disabled:这是一个布尔属性,当值为 true 时使单选按钮禁用。默认情况下,该值为 false。
  6. items:显示列表中的单选按钮名称。
  7. 分隔符:指定要在每个“输入”标签之间使用的分隔符,类型为“单选按钮”。这里我们使用'|'符号作为分隔符。
  8. onclick:它是事件属性,当用户单击单选按钮时,将执行指定的函数。这里,当用户点击Yes时,enable()函数将被执行,当用户点击No时,disable()函数将被执行。

JavaScript 函数

我们正在调用 javascript 函数来启用/禁用单选按钮。

  • 最后,当表单提交时,容器将检查控制器类中具有 URL -“/submit”和方法 -“post”的方法,并执行它来处理请求。

B.文件:选择。Java

Java

// Java Program to Illustrate Choice Class
  
package com.geek.app;
  
// Class
public class Choice {
  
    // Class data members
    private String name;
    private String job;
    private String experience;
    private String years;
  
    // Getter
    public String getName() { return name; }
  
    // Setter
    public void setName(String name) { this.name = name; }
  
    // Getter
    public String getJob() { return job; }
  
    // Setter
    public void setJob(String job) { this.job = job; }
  
    // Getter
    public String getExperience() { return experience; }
  
    // Setter
    public void setExperience(String experience)
    {
        this.experience = experience;
    }
  
    // Getter
    public String getYears() { return years; }
  
    // Setter
    public void setYears(String years)
    {
        this.years = years;
    }
}
  • 这是定义所需参数的Java bean 类。
  • 在这里,我们将 name、job、experience 和 years 定义为参数及其 getter/setter 方法来获取和设置相应属性的值。

C.文件:ChoiceController。Java

Java

// Java Program to illustrate ChoiceController Class
  
package com.geek.app;
  
// Importing required classes
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
  
// Annotation
@Controller
  
// Class
public class ChoiceController {
  
    // Annotation
    @RequestMapping(value = "/")
  
    public String viewPage(Model model)
    {
        Choice choice = new Choice();
        model.addAttribute("choice", choice);
  
        return "choice";
    }
  
    // Annotation
    @ModelAttribute("experienceYears")
    public List experienceYears()
    {
        List years = Arrays.asList(
            "1-3 Years", "3-5 years", "Above 5 Years");
        return years;
    }
  
    // Annotation
    @RequestMapping(value = "/submit",
                    method = RequestMethod.POST)
    public String
    submit(@ModelAttribute("choice") Choice choice)
    {
        return "summary";
    }
}
  • 这是控制器类,它根据请求 URL 的映射执行方法。
  • 注释 @Controller 向容器传达此类是 spring 控制器类。要使用这个注解,我们需要导入 org.springframework.stereotype.Controller 包。
  • 注释 @RequestMapping 根据提供的值将请求 URL 映射到指定的方法。要使用这个注解,我们需要导入 org.springframework.web.bind.annotation.RequestMapping 包。
  • 因此,当 URL 请求带有 value="/submit" 时,容器将执行该类的提交方法。
  • 注解@ModelAttribute,用于将方法参数或方法返回值绑定到命名模型属性。我们需要导入 org.springframework.web.bind.annotation.ModelAttribute 包。
  • 值为“experienceYears”的@ModelAttribute,执行experienceYears 方法来创建要在radiobuttons 标签中显示的项目列表。
  • RequestMethod 指定用户请求的类型,无论是获取请求还是发布请求。

D.文件:summary.jsp

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Summary page


  
    

Hello ${choice.name}!!

       Looking for a job:     ${choice.job}     
    Work experience:     ${choice.experience}     
    Years of experience:     ${choice.years}   

这是处理请求后在浏览器中显示用户选择的值的输出 Jsp 页面。

执行/输出:

  • 创建完所有需要的 . Java和 .jsp 文件,在嵌入式服务器上运行项目。
  • 在项目上,运行方式-> 在服务器上运行。
  • 在 localhost 中选择服务器以运行应用程序。
  • 在浏览器中打开 URL: http://localhost:8080/app/以获取以下屏幕。

欢迎页面——choice.jsp

场景一:输入姓名,你有工作经验吗?字段如下,

场景一:输入

  • 当我们为您是否有工作经验选择选项否时?领域,所有的单选按钮你有多少年的经验?该字段被禁用。
  • 现在,单击提交按钮以获取输出。

场景一:输出

场景 2:现在,为您是否有工作经验选择是选项?场地。

场景 2:输入

  • 当我们为您是否有工作经验选择了选项是时?领域,所有的单选按钮你有多少年的经验?字段已启用。选择所需的选项。
  • 单击提交按钮以获取输出。

场景 2:输出

这样,我们可以在用户需要选择选项的应用程序中使用标签单选按钮和单选按钮,并且我们可以根据项目要求包含不同的属性。