介绍:被@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 | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | 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