@ModelAttribute注解与spring的表单标签库form

Posted 晨港飞燕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@ModelAttribute注解与spring的表单标签库form相关的知识,希望对你有一定的参考价值。

介绍:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行

1.@ModelAttribute

	/**
	 * 根据id查询数据
	 * 可以添加Model属性,进行参数返回,
	 * model属性如果没有指定,它由返回类型隐含表示,如这个方法返回FfNewRedbagManage类型,那么这个model属性的名称是ffNewRedbagManage
	 */

	@ModelAttribute
	public FfNewRedbagManage get(@RequestParam(required=false) String id,Model model) 
		System.out.println(id);
		FfNewRedbagManage entity = null;
		if (StringUtils.isNotBlank(id))
			entity = server.get(id);
		
		if (entity == null)
			entity = new FfNewRedbagManage();
		
		model.addAttribute("test","测试abc");
		entity.setState("中国天津");
		return entity;
	


	//查看,增加,编辑表单页面
	@RequestMapping(value = "/form")
	public String form(FfNewRedbagManage ffNewRedbagManage, Model model) 
		if(StringUtils.isBlank(ffNewRedbagManage.getId()))//新建
			
		

		return "modules/ff/server/ffNewRedbagManageForm";
	

在获得请求/form时,get方法在form方法之前先被调用,

2.表单标签库form

<%--引入标签--%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>


<%--form:形式的写法能让编辑页面进来的值直接赋予,不用jstl的$符号,path为必须属性,是后台model中的属性,如果想给input默认值,可以写原生input,--%>

<form:form id="inputForm" modelAttribute="ffNewRedbagManage" cssStyle="height: 100%">
    1.<form:input path="state"  id="state" />
    2.<input type="text"  value="$ffNewRedbagManage.state"/>
    3.<input type="text" name="state"/>
    4.<input type="text" name="test"  id="test"  value="$test"/>

    <form:hidden path="id"  id="id" />
    <input type="hidden" id="type" name="type" value="1">

3.其他常用标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

C标签的<c:forEach>,<c:if>和<c:choose> 

<c:forEach>

语法:<c:forEach var="name" items="Collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>

这个标签的目的就是要遍历

items : 就是你要遍历的集合,就是要遍历的全部内容要放在这个下面

var  :    就是这个集合下面的每一个元素,比如一个集合1,2,3,4,5,那么var表示的就是1或者2或者3...

begin:   默认从0开始,表示从第几个开始取元素

end  :    和begin对应,表示到第几个元素终止

step :     步进,默认是1,表示一个一个跳,还是任意数字跳

varStatus:  表示集合中每个元素的相关信息,有4种状态:index(所在位置,即索引).count(总共已迭代的次数).first(是否为第一个位置),last(是否为最后一个位置)
 

 <c:forEach var="fuwa" items="$a" begin="3" end="4" step="1" varStatus="s">
    <c:out value="$fuwa" />的四种属性:<br>
    所在位置,即索引:<c:out value="$s.index" /><br>
    总共已迭代的次数:<c:out value="$s.count" /><br>
    是否为第一个位置:<c:out value="$s.first" /><br>
    是否为最后一个位置:<c:out value="$s.last" /><br>
 </c:forEach>

<c:if>

<c:if>标签有如下属性:

属性描述是否必要默认值
test条件
var用于存储条件结果的变量
scopevar属性的作用域page
<c:set var="salary" scope="session" value="$2000"/>
<c:if test="$salary == 2000">
   <p>我的工资为: <c:out value="$salary"/><p>
</c:if>
或者多条件
<c:if test="$salary == 2000 && salary <3000">
   <p>我的工资为: <c:out value="$salary"/><p>
</c:if>

运行结果如下:

我的工资为: 4000

C标签的if else

 

 

<c:choose> 

<c:choose>  
   <c:when test="$user.id=='1' "> 
       条件1
   </c:when> 

   <c:when test="$user.id=='0' "> 
       条件2
   </c:when> 
   
   <c:otherwise> 
        条件3
   </c:otherwise>  
</c:choose>

这组标签说明当满足条件1执行条件1,而其他两个不执行,当满足条件2执行条件2,而其他两个不执行,当所有<c:when>都不满足时才执行<c:otherwise>,这就实现了if else的多分支功能

注意,如果值是null,而条件却是判空字符串,则不走分支,保险起见,需要使用关键字empty,例如

<c:if test="$not empty user.name">
   条件体
</c:if>

可以判断name是空字符串和null

 

 

 

 

参考:

@ModelAttribute注解:https://blog.csdn.net/li_xiao_ming/article/details/8349115

标签库:https://blog.csdn.net/weixin_45682889/article/details/113346405

https://blog.csdn.net/weixin_40903194/article/details/83374711

https://www.runoob.com/jsp/jstl-core-if-tag.html

 

以上是关于@ModelAttribute注解与spring的表单标签库form的主要内容,如果未能解决你的问题,请参考以下文章

ModelAttribute注解使用与spring重定向传参

Spring - @ModelAttribute注解的使用

Spring的@ModelAttribute注解

spring mvc@ModelAttribute与@SessionAttributes的执行流程

全面解析Spring中@ModelAttribute注解的用法

Spring MVC @ModelAttribute 作为方法参数注解