首页 > 编程语言 >Java 新手如何使用Spring MVC 中的双向数据绑定?

Java 新手如何使用Spring MVC 中的双向数据绑定?

时间:2023-10-18 17:02:04浏览次数:37  
标签:geeksforgeeks Java Spring calculator springframework MVC import org public

Java 新手如何使用Spring MVC 中的双向数据绑定?_html

数据绑定,正如其名称本身一样,是一个不言自明的词。在数据绑定中,我们要做的是捕获或存储数据,以便我们可以根据需要将该数据与另一个资源绑定(例如在前端部分显示数据),或者我们也可以从一个变量并根据我们的要求显示它。例如,有一个谷歌表单,用户在该表单中输入所有详细信息,我们必须捕获/存储数据并根据我们的要求将其与前端部分绑定。在Spring中使用数据绑定概念,我们可以完成以下两个任务

  1. 我们可以从变量中读取
  2. 我们可以写入一个变量

所以双向数据绑定意味着我们可以执行读和写操作。我们讨论了如何写入变量任务,在本文中,我们主要关注从变量读取任务。 

示例项目

设置项目

我们将在该项目中使用 Spring Tool Suite 4 IDE。请参考这篇文章在本地机器上安装STS如何下载并安装Spring Tool Suite(Spring Tools 4 for Eclipse)IDE?转到 STS IDE,然后创建一个新的 Maven 项目,文件 > 新建 > Maven 项目,然后选择以下原型,如下图所示:  

Java 新手如何使用Spring MVC 中的双向数据绑定?_spring_02

 

将以下 Maven 依赖项和插件添加到您的pom.xml文件中。 

pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.18</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- plugin -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

以下是添加这些依赖项后 pom.xml 文件的完整代码。

文件:pom.xml 

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.geeksforgeeks</groupId>
	<artifactId>simple-calculator</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>simple-calculator Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.3.18</version>
		</dependency>
	
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<build>
		<finalName>simple-calculator</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

配置调度程序 Servlet

在进入编码部分之前,让我们看一下下图中的文件结构。 

Java 新手如何使用Spring MVC 中的双向数据绑定?_spring_03

 

因此,首先创建一个src/main/java文件夹,并在该文件夹中创建一个名为CalculatorAppIntilizer的类,并将其放入com.geeksforgeeks.calculator.config包中,并扩展AbstractAnnotationConfigDispatcherServletInitializer类。请参阅下图。

Java 新手如何使用Spring MVC 中的双向数据绑定?_spring_04

每当您扩展此类时,它都有一些我们需要提供实现的预抽象方法。现在在这个类中,我们只需编写两行代码来配置 Dispatcher Servlet。在此之前,我们必须为 Spring 配置文件创建另一个类。因此,转到src/main/java 文件夹,并在该文件夹内创建一个名为CalculatorAppConfig的类,并将其放入com.geeksforgeeks.calculator.config包中。以下是CalculatorAppConfig.java文件的代码。

文件:CalculatorAppConfig.java

package com.geeksforgeeks.calculator.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class CalculatorAppIntilizer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		// TODO Auto-generated method stub
		return null;
	}

	// Registering the Spring config file
	@Override
	protected Class<?>[] getServletConfigClasses() {
		Class aClass[] = { CalculatorAppConfig.class };
		return aClass;
	}

	// Add mapping url
	@Override
	protected String[] getServletMappings() {
		String arr[] = { "/geeksforgeeks.org/*" };
		return arr;
	}

}

设置ViewResolver

Spring MVC 是一个用于构建 Web 应用程序的 Web MVC 框架。一般来说,所有 MVC 框架都提供了一种使用视图的方法。Spring 通过 ViewResolvers 来实现这一点,它使您能够在浏览器中渲染模型,而无需将实现与特定的视图技术绑定。在这里阅读更多内容:Spring MVC 中的 ViewResolver。因此,为了设置 ViewResolver,请转到CalculatorAppConfig.java文件并写下代码如下

@Bean
public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
}

下面是编写设置 ViewResolver 的代码后 CalculatorAppConfig.java文件的更新代码。

文件:更新的CalculatorAppConfig.java

package com.geeksforgeeks.calculator.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.geeksforgeeks.calculator.controllers")
public class CalculatorAppConfig {

	// setup ViewResolver
	@Bean
	public InternalResourceViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/view/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}

}

双向数据绑定(从变量读取)

首先,我们必须创建一个 DTO 类。因此,转到src/main/java文件夹,并在该文件夹内创建一个名为NameInfoDTO的类,并将其放入com.geeksforgeeks.calculator.dto包中。以下是NameInfoDTO.java文件的代码。代码中添加了注释,以便更详细地理解代码。

文件:NameInfoDTO.java

package com.geeksforgeeks.calculator.dto;

public class NameInfoDTO {

	// Provided some static values
	// inside the variable
	// And we are going to read these values
	private String firstName = "Anshul";
	private String lastName = "Aggarwal";

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	@Override
	public String toString() {
		return "NameInfoDTO [firstName=" + firstName + ", lastName=" + lastName + "]";
	}

}

创建控制器 

转到src/main/java文件夹,并在该文件夹内创建一个名为AppController的类,并将其放入com.geeksforgeeks.calculator.controllers包中。以下是AppController.java文件的代码。

文件:AppController.java 文件

package com.geeksforgeeks.calculator.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AppController {
	
	@RequestMapping("/home")
	public String showHomePage() {
		return "welcome-page";
	}

}

因此,在此文件中,我们必须编写代码,通过从 DTO 获取现有属性来读取它。我们可以编写这样的代码

@RequestMapping("/home")
public String showHomePage(Model model) {
        
        // Read the existing property by
        // fetching it from the DTO
        NameInfoDTO nameInfoDTO = new NameInfoDTO();
        model.addAttribute("nameInfo", nameInfoDTO);
        
        return "welcome-page";
}

下面是AppController.java文件的更新代码。

文件:更新的 AppController.java 文件

package com.geeksforgeeks.calculator.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.geeksforgeeks.calculator.dto.NameInfoDTO;

@Controller
public class AppController {

	@RequestMapping("/home")
	public String showHomePage(Model model) {
		
		// Read the existing property by
		// fetching it from the DTO
		NameInfoDTO nameInfoDTO = new NameInfoDTO();
		model.addAttribute("nameInfo", nameInfoDTO);
		
		return "welcome-page";
	}

}

创建视图

现在我们必须在WEB-INF/view文件夹中创建一个名为“ welcome-page ”的视图,扩展名为.jsp。因此,转到src > main > webapp > WEB-INF并创建一个文件夹视图,并在该文件夹内创建一个名为welcome-page的jsp 文件。下面是welcome-page.jsp文件的代码。

文件:welcome-page.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
</head>
<body>
	<h1 align="center">Two-Way Data Binding in Spring MVC with Example</h1>
	<hr />
	<form:form action="process-homepage" method="get" modelAttribute="nameInfo">
		<div align="center">

<p>
				<label for="name1">Enter First Name : </label>
				<form:input id="name1" path="firstName" />
			</p>
<p>
				<label for="name2">Enter Last Name : </label> 
				<form:input id="name2" path="lastName" />
			</p>
			<input type="submit" value="Bind Data" />
		</div>
	</form:form>
</body>
</html>

现在我们已经完成了编码部分。让我们运行并测试我们的应用程序。 

运行您的应用程序

要运行我们的 Spring MVC 应用程序,请右键单击您的项目 > 运行方式 > 在服务器上运行。并如下图所示运行您的应用程序,如下图所示:  

Java 新手如何使用Spring MVC 中的双向数据绑定?_spring_05

 

之后使用以下 URL 运行您的控制器

http://localhost:8080/simple-calculator/geeksforgeeks.org/home

输出:

Java 新手如何使用Spring MVC 中的双向数据绑定?_java文件_06

 

因此,在输出中,无论何时点击 URL,您都可以看到值已经存在,这意味着 spring 成功从变量读取了值。 

标签:geeksforgeeks,Java,Spring,calculator,springframework,MVC,import,org,public
From: https://blog.51cto.com/demo007x/7902846

相关文章

  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数?
    Java新手如何使用SpringMVC中的查询字符串和查询参数?根据维基百科的说法,“查询字符串是统一资源定位符(URL)的一部分,它为指定的参数分配值。查询字符串通常包括由Web浏览器或其他客户端应用程序添加到基本URL的字段,例如作为HTML的一部分、选择页面的外观或跳转到多媒体内容......
  • Spring Boot中的过滤器、拦截器、监听器技巧汇总:让你快速成为大神
    ......
  • springboot 打 war 包后的访问路径
    http://laremehpe.eu.org:9090/api/access/time 域名:http://laremehpe.eu.org端口号:9090访问路径:/api/access/time/api是tomcat解压后文件夹名称/access是类上的路径名称(@RequestMapping)/time是方法上的路径名称(@RequestMapping) 这里的9090指的是访问服务器的9090......
  • Spring MVC,Mybatis常见问题
    如果您面试一个只做过SpringMVC+MyBatis项目的候选人,您可能会问一些问题来评估其在这两个技术上的了解和经验。以下是一些可能的问题及其答案:什么是SpringMVC和MyBatis?它们在项目中的作用是什么?答:SpringMVC是一个基于Spring框架的用于构建Web应用程序的模块,它使用MVC(Model-......
  • JAVA IO 详细介绍
                  ......
  • 【JAVA】cron定时怎么记 ss mi hh DD MM 星期 YY
      ......
  • spring setter注入
     <!--对象类型1-->  <propertyname="user">   <props>     <propkey="">dddd</prop>   </props>  </property>   <!--对象类型2-->   <propertyname="user"ref="st......
  • JavaScript高级程序设计(第3版)pdf电子版Nicholas C. Zakas
    JavaScript高级程序设计(第3版)pdf电子版作者:[美]NicholasC.Zakas原作名:ProfessionalJavaScriptforWeb出版年:2012-3-29ISBN:9787115275790链接提取码:jz6rJavaScript最基础的书籍。......
  • Java 设计模式之七大原则
    Java设计模式之七大原则|Drunkbaby'sBlog(drun1baby.top)1、认识设计模式1.1什么是设计模式所谓设计模式,就是对经常出现的软件设计问题的成熟解决方案。很多人把设计模式想象成非常高深的概念,实际上设计模式仅仅是对特定问题的一种惯性思维。笔者见过一些学员喜欢抱着一......
  • SpringBoot 注解小记
    用于入口类的注解SpringBootApplication标识该类是入口ComponentScan表示扫描入口类同级和所有子包下的Component我们也可以使用ComponentScan("Com.XXXX")自定义扫描路径用于类的注解@Component,@Service,@Repository,@Controller四个注解用于类上,后三个实质上都是Compon......