总结之常用的JSTL标签(c标签)及freemarker标签

开发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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值