详解Spring MVC模型(Model)层和视图(View)层

简介:
这里 不得不说Spring的mvc设计将Entity和Model分离的好处:也许很多SSH开发的程序猿一接触spring的mvc框架感觉这样分离很没有必要,因为struts直接使用Entity就可以了。那请思考一个问题?页面有业务逻辑需要声明一个变量,但不是实体需要保存的字段,是不是需要在action或者其他的位置声明这个变量?这时候,随着开发深入这种变量是不是很混乱。那么将这样的变量放到一个专门的java类中统一管理,是不是就清晰了。清晰了之后我们来看spring mvc的model层,是不是就刚好吻合这样的情况

Spring MVC强大一:灵活的访问控制
一个Controller处理一个功能模块的所有请求,只需要使用@RequestMapping("save2.do")就可以直接使用"../save2.do"接受请求了。不用向Struts一样声明大量的Action

Spring MVC强大二:支持多个Java Model
也许大家已经习惯使用Struts表单提交只支持一个JavaBean的模式,这种模式缺点很明显,想一个表单提交两个对象是不可能实现的。而spring mvc呢,完全支持多个java model绑定到一个表单,一次提交就可以接收到所有的对象。举个例子:A、B两个Entity,一对多的关联关系,A中包含多个B,使用List集合技术实现。这里对应的Model层有A、B,但是A模型不支持绑定 包含对象的 List集合,因为model需要内部转换为Entity保存数据。这时候,关键点来了,我们直接在Model层声明C,内容包含一个List<B> bList属性。这时候,A的页面就可以直接使用C中声明的集合属性( name=" bList[0].name " ) 传参了。注意在A的Controller声明方法,参数中包含C就Ok了。下面贴出C的代码、A页面的代码、A的Controller方法
C模型层Model:
 
  1. publicclass C extends ModelSupport {

  2. private List<B> bList;

  3. public List<B> getBList() {

  4. return bList;

  5. }

  6. publicvoid setBList(List<B> bList) {

  7. this.bList = bList;

  8. }

  9. }

A视图层View:
 
  1. <tr>

  2. <td>${daily.buyGoodName}</td>

  3. <td><inputtype="text"name="bList[0].dmGstorage"value="0"onkeyup="clearNoNum(this)"/></td>

  4. <td><inputtype="text"name="bList[0].dmGoutflow"value="0"onkeyup="clearNoNum(this)"/></td>

  5. <td><inputtype="text"name="bList[0].dmGinventory"value="0"/></td>

  6. <td><inputtype="text"name="bList[0].dmGenableDay"value="0"onkeyup="clearNoNum(this)"/></td>

  7. </tr>


A控制层Controller:

 
  1. @RequestMapping("dmgSave")

  2. @ResponseBody

  3. public Json addSave(MaterialDailyMang mode,C c){

  4. System.out.println(c.getBList().size());

  5. Json json= super.addSave(mode);

  6. //保存物品集合

  7. for (B b : c.getBList()) {

  8. MaterialDailyMang mang=(MaterialDailyMang) json.getObj();

  9. b.setDmId(mang.getId());

  10. materialDailyGoodService.addSave(b);

  11. }

  12. return json;

  13. }


本文转自 沫沫金 51CTO博客,原文链接:http://blog.51cto.com/zl0828/1159604,如需转载请自行联系原作者
相关文章
|
4月前
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
154 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
4月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
188 0
|
4月前
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
126 0
|
4月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
154 0
|
4月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
130 0
|
3月前
|
前端开发 IDE Java
Spring MVC 中因导入错误的 Model 类报错问题解析
在 Spring MVC 或 Spring Boot 开发中,若导入错误的 `Model` 类(如 `ch.qos.logback.core.model.Model`),会导致无法解析 `addAttribute` 方法的错误。正确类应为 `org.springframework.ui.Model`。此问题通常因 IDE 自动导入错误类引起。解决方法包括:删除错误导入、添加正确包路径、验证依赖及清理缓存。确保代码中正确使用 Spring 提供的 `Model` 接口以实现前后端数据传递。
120 0
|
3月前
|
安全 前端开发 Java
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
212 0
|
6月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
278 29
|
6月前
|
XML 监控 前端开发
Spring Boot中的WebFlux编程模型
Spring WebFlux 是 Spring Framework 5 引入的响应式编程模型,基于 Reactor 框架,支持非阻塞异步编程,适用于高并发和 I/O 密集型应用。本文介绍 WebFlux 的原理、优势及在 Spring Boot 中的应用,包括添加依赖、编写响应式控制器和服务层实现。WebFlux 提供高性能、快速响应和资源节省等优点,适合现代 Web 应用开发。
411 15
|
7月前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
128 4

热门文章

最新文章