这两天做公司项目中的一个小功能,其中用了一些jstl标签,以前没有做过,现在基本实现了
1.jstl最常见的就是if 和foreach,out的使用
<div class="per-list">
<ul class="list-4">
<li><c:if test="${not empty listqikan }">
<c:forEach var="file" items="${listqikan}" varStatus="status">
<c:out value="${file['lunwenbiaoti']}"></c:out>
</c:forEach>
</c:if>
</li>
</ul>
</div>
var items varStatus begin end step这些经常用
自定义jstl标签
开发中可能有些功能需要自己去实现,但是标准有没有提供,我们可以自己来写一个
例如,我需要实现jstl中整数相除求整的实现,并将其运用到for each中
(1)首先写一个java实现:
package org.nssd.utils;
public class JSTLFunction {
/**
* 两数相除获取整数结果
*
* @param first
* @param second
* @return int
*/
public static int chufa(int first, int second) {
return first / second;
}
}
(2)写自己的标签
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>len</short-name>
<function>
<description>chufa</description><!-- 对这个EL方法的描述 -->
<name>chufa</name><!-- 调用EL方法的名称 -->
<function-class>org.nssd.utils.JSTLFunction</function-class>
<function-signature>int chufa(int,int)</function-signature>
</function>
</taglib>
命名为myJstl.tld
使用:${myTag:chufa(5,3) }
下面是实现项目的一个功能代码:
for each遍历map(map中还有一个list)Map<Integer, List<Object[]>>
<div class="total" style="height:256px; width:200px;OVERFLOW-y:auto;">
<ul class="journalListNum">
<c:if test="${not empty journalNumMap}">
<c:forEach var="journal" items="${journalNumMap}">
<li><c:out value="${journal.key}"/><span>年</span></li>
<ul>
<c:if test="${fn:length(journal.value) <= 10}">
<li >
<c:forEach var="list" items="${journal.value}" varStatus="s">
<a href="<portlet:renderURL>
<portlet:param name="myaction" value="seeqikan" />
<portlet:param name="objectId" value="${param.objectId}" />
<portlet:param name="name" value="${list[0] }"></portlet:param>
<portlet:param name="qikanzhongwenming" value="${list[4] }"></portlet:param>
</portlet:renderURL>">${s.index +1}</a><span> </span>
</c:forEach>
</li>
</c:if>
<c:if test="${fn:length(journal.value) > 10}">
<c:forEach end="${myTag:chufa((fn:length(journal.value)),10) }" begin="1" step="1" varStatus="s">
<li>
<c:forEach var="list" items="${journal.value}" begin="${(s.index-1) *10}" end="${s.index * 10 -1}" step="1" varStatus="ss">
<a href="<portlet:renderURL>
<portlet:param name="myaction" value="seeqikan" />
<portlet:param name="objectId" value="${param.objectId}" />
<portlet:param name="name" value="${list[0] }"></portlet:param>
<portlet:param name="qikanzhongwenming" value="${list[4] }"></portlet:param>
</portlet:renderURL>">${ss.index +1}</a><span> </span>
</c:forEach>
</li>
</c:forEach>
<li >
<c:forEach var="list" items="${journal.value}" begin="${myTag:chufa((fn:length(journal.value)),10)*10 }" end="${fn:length(journal.value) -1}" step="1" varStatus="ss">
<a href="<portlet:renderURL>
<portlet:param name="myaction" value="seeqikan" />
<portlet:param name="objectId" value="${param.objectId}" />
<portlet:param name="name" value="${list[0] }"></portlet:param>
<portlet:param name="qikanzhongwenming" value="${list[4] }"></portlet:param>
</portlet:renderURL>">${ss.index +1}</a><span> </span>
</c:forEach>
</li>
</c:if>
</ul>
</c:forEach>
</c:if>
</ul>
</div>