提示:这里使用的几乎都是jsp的内置函数,且都经过本人测试,但要记得jsp页面引入文件头。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
提示:jsp是一个非常强大的前端模板,只不过由于前后端分离,各司其职的概念,这种在前端写后端代码的方式越来越不受欢迎。但尽管如此,使用者群体还是挺大的,而且一开始的初学者也几乎都是从jsp磨炼过来的,所以我在此稍稍总结一下jsp的一些内置方法。
提示:以下是本篇文章正文内容,下面案例可供参考
代码如下(示例):使用c标签以及fn标签,轻松实现list.name字段过长就截取固定长度的需求。
<c:if test="${fn:length(list.name) > 15}">
${ fn:substring(list.name, 0, 15)}…
</c:if>
<c:if test="${fn:length(list.name) <= 15}">
${list.name }
</c:if>
代码如下(示例):使用c标签实现的简单的foreach循环,可以指定开始值-begin,最大值-end,每次循环的步数-step(相当于每次循环加几),并且通过varStatus="id"拿到索引-(id.index),以及循环变量的当前值-var。
<c:forEach begin="1" end="${PageInfo.total }" step="1" var="pNumber" varStatus="id">
<c:if test="${PageInfo.pageNumber == id.index}">
<li class="active">
<a onclick="javascript:return false;" > ${pNumber} </a>
</li>
</c:if>
<c:if test="${PageInfo.pageNumber != id.index }">
<li>
<a href="${pageContext.request.contextPath}/CommentServlet?pageNumber=${pNumber}" > ${pNumber} </a>
</li>
</c:if>
</c:forEach>
代码如下(示例):像一些静态文件,我们都需要控制它的css以及js,还有一些action的跳转也是如此,如果采用相对路径,就很有可能出现资源访问路径不对的情况,所有我最常用的写法就是:
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/bootstrap.min.css">
<script src="${pageContext.request.contextPath}/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<form id="formid" action="${pageContext.request.contextPath}/AddGoodsServlet?flag=add" enctype="multipart/form-data" method="post" onsubmit="return check()" >
当你在路径的前面都加上**${pageContext.request.contextPath}**时,就再也不用考虑路径的变更了。
代码如下(示例):fn:length-这个方法是获取集合的size,第二重循环是简便写法。相当于第一个大循环是简单for循环,第二个循环是foreach循环。第二个循环项为items,其子项为var。
<c:forEach begin="1" end="${fn:length(CategoryList)}" step="1" varStatus="id">
<c:forEach items="${DecorateList }" var="list" >
<c:if test="${list.id == id.index }">
你要实现的代码
</c:if>
</c:forEach>
</c:forEach>
当然,jsp还内置了许多其他的方法,有些我自己也没用过,在此给大家列举一下可能会用到的一些方法,希望大家用得上,也欢迎大家补充,谢谢。
函数名 | 函数说明 | 使用举例 |
---|---|---|
fn:contains | 判定字符串是否包含另外一个字符串 | <c:if test="${fn:contains(name, searchString)}"> |
fn:containsIgnoreCase | 判定字符串是否包含另外一个字符串(大小写无关) | <c:iftest="${fn:containsIgnoreCase(name, searchString)}"> |
fn:endsWith | 判定字符串是否以另外字符串结束 | <c:if test="${fn:endsWith(filename, “.txt”)}"> |
fn:escapeXml | 把一些字符转成XML表示,例如 <字符应该转为< | ${fn:escapeXml(param:info)} |
fn:indexOf | 子字符串在母字符串中出现的位置 | ${fn:indexOf(name, “-”)} |
fn:join | 将数组中的数据联合成一个新字符串,并使用指定字符格开 | ${fn:join(array, “;”)} |
fn:length | 获取字符串的长度,或者数组的大小 | ${fn:length(shoppingCart.products)} |
fn:replace | 替换字符串中指定的字符 | ${fn:replace(text, “-”, “•”)} |
fn:split | 把字符串按照指定字符切分 | ${fn:split(customerNames, “;”)} |
fn:startsWith | 判定字符串是否以某个子串开始 | <c:if test="${fn:startsWith(product.id, “100-”)}"> |
fn:substring | 获取子串 | ${fn:substring(zip, 6, -1)} |
fn:substringAfter | 获取从某个字符所在位置开始的子串 | ${fn:substringAfter(zip, “-”)} |
fn:substringBefore | 获取从开始到某个字符所在位置的子串 | ${fn:substringBefore(zip, “-”)} |
fn:toLowerCase | 转为小写 | ${fn.toLowerCase(product.name)} |
fn:toUpperCase | 转为大写字符 | ${fn.UpperCase(product.name)} |
fn:trim | 去除字符串前后的空格 | ${fn.trim(name)} |
… | … | … |