开发jsp页面往往离不开JSTL标签,平常使用时容易忘记某些标签的使用,在此总结一下。
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已!
导入标签库
<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>
if标签
if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。
注意判断语句整体放入 ${ },如:test="${user.id==1}"
<c:if test="${user.id==1}">
</c:if>
out标签
输出aaa字符串常量:<c:out value=“aaa”/>
与${aaa}相同:<c:out value="${aaa}"/>
当${aaa}不存在时,输出xxx字符串:<c:out value="${aaa}" default=“xxx”/>
set标签
设置变量,即在pageContext中添加name为a,value为hello的数据。
<c:set var="username" value="123456"/>
remove标签
删除变量,即删除pageContext中name为a的数据
<c:remove var="a" scope=”page”/>
choose标签
choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。
<c:set var="score" value="${user.score }"/>
<c:choose>
<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<c:when test="${score >= 90 }">S级</c:when>
<c:when test="${score >= 80 }">A级</c:when>
<c:when test="${score >= 70 }">B级</c:when>
<c:when test="${score >= 60 }">C级</c:when>
<c:otherwise>D级</c:otherwise>
</c:choose>
url标签
url标签:该标签会在需要重写URL时添加。
<c:url value="/" />
输出上下文路径:/项目名/
<c:url value="/" var=“a” scope=“request”/>
把本该输出的结果赋给变量a。范围为request
<c:url value="/" />
forEach 标签
forEach当前就是循环标签,在jsp页面中经常使用
例子:三个换一行
<c:if test="${ (i.count) % 3 eq 0}"><br/></c:if>
- List变量
<c:forEach var="item" items="${userList }">
<c:out value="name: ${item }"/><br/>
</c:forEach>
- Map遍历
<c:forEach var="item" items="${stu }">
<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>
forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=“i” …/>,这时就可以使用i这个变量来获取循环的状态了。
count:int类型,当前以遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。
${i.index}
fmt标签
fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。
格式化日期
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
格式化数字
d1=2.4
d2=3.5
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
获取List长度
一般List的长度,在java中的 .size(),JSTL标签是
两种
<c:if test="${projectsByCreateUser.size()>0 }">
</c:if>
${fn:length(userList) }
其中 属于JSTL标签中的fn函数了,感兴趣可以搜索一下相关知识。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
多选框c标签处理案例
数据库存的是string,如:1,2,4,5
propertyMap为多选款选项map
<c:forEach items="${propertyMap}" var="item">
<input type="checkbox" name="project.property" value="${item.key}" id="techProperty_${item.key}" style="margin-left: 10px;" required <c:set value="${ fn:split(voModel.project.troperty, ',') }" var="propertys" />
<c:forEach items="${propertys}" var="property">
<c:if test="${item.key == property}">checked="checked"</c:if>
</c:forEach> lay-skin="primary" title="${item.value}">
</c:forEach>
freemarker标签
页面除了C标签还可以通过freemarker标签实现,vue也行。
freemarker作为springmvc一种视图格式,默认情况下SpringMVC支持freemarker视图格式
freemarker依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐freemarker</artifactId>
</dependency>
配置文件
spring: application:
name: test‐freemarker #指定服务名
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便 进行模板测试
创建模板
在 src/main/resources下创建templates,此目录为freemarker的默认模板存放目录。 在templates下创建模板文件test1.ftl,模板中的${name}终会被freemarker替换成具体的数据。
遍历List数据
<#list stus as stu>
<tr>
<td>${stu_index + 1}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<td>${stu.mondy}</td>
</tr>
</#list>
说明:_index:得到循环的下标,使用方法是在stu后边加"_index",它的值是从0开始
遍历Map数据
map中stu1学生信息
姓名:${stuMap['stu1'].name}
全遍历
<#list stuMap?keys as k>
<tr>
<td>${k_index + 1}</td>
<td>${stuMap[k].name}</td>
<td>${stuMap[k].age}</td>
<td >${stuMap[k].mondy}</td>
</tr>
</#list>
if指令
<td <#if stu.name =='小明'>style="background:red;"</#if>>${stu.name}</td>
内建函数
内建函数语法格式: 变量+?+函数名称
1、和到某个集合的大小
${集合名?size}
2、日期格式化
显示年月日: ${today?date}
显示时分秒:${today?time}
显示日期+时间:${today?datetime} <br>
自定义格式化: ${today?string("yyyy年MM月")
3、将json字符串转成对象
<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />
开户行:${data.bank} 账号:${data.account