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

本文详细介绍了Spring MVC框架中@ModelAttribute注解的用途及工作原理,并结合实例展示了如何利用该注解预处理控制器方法的输入参数。此外,还深入探讨了JSTL标签库的应用,包括表单标签库(form)和其他常用标签库(c、fmt、fn)的具体用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:被@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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨港飞燕刘彦登

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值