JSTL

action和EL表达式虽然已经提供了比较强大的功能,但是显然它还不能满足需求,比如在输出的时候带有<br>等标签,会别翻译成html,或者是一些分支语句,他们也不支持等等,这时候我们需要的自定义标签。
在真正开始写自己的标签之前,我们已经有了一个很好的,标签库,JSTL。全名JSP Standard Tag Library。提供了非常全面的功能。

只要把jar包包含过去,在页面中加入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
其中的uri为jar包中包含的META-INF目录下c.tld文件中的uri。也可以把这个c.tld文件拷贝到当前工程的WEB-INF目录,然后在页面中加入:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>这样就能在页面中使用Jstl的C标签了。

 

c:out
比如在request中存在属性content。值为你好<br>word 。页面代码如下:
${content }<br>
<c:out value="${content }" escapeXml="true"></c:out><br>
<c:out value="${content1 }" default="你好<br>word1" escapeXml="false"></c:out>
直接使用el会发现<br>被浏览器给识别成显示了。只有把<br>写成转义的&lt;等符号才能够显示出来。而不是换行。
使用c:out标签就能够方便许多,escapeXml能够指定是否翻译html标签,默认为true,不会翻译成换行而是显示出来。
default会在value的值为null的时候被显示出来

c:forEach 遍历
<c:forEach var="person" items="${persons}" varStatus="index" begin="0" end="2" step="1">
          ${index.count }===${person.username }<br>
      </c:forEach>

persons为一个包含了Person对象的list。var为遍历List的时候所保存的临时变量,在循环中可以对这个变量在进行遍历或者是其他的操作。
其他属性为可选选项了。varStatus,用来通过.count得到当前的序列号。
begin为其实索引,从0开始,end为结束索引,step为步子,默认为1,可以设置为其他的数字。

流程控制
c:if
<c:if test="${flag eq 'true'}" >
  <c:out value="通过"></c:out>
</c:if>
test中的表达式需要返回boolean类型的值,eq表示的是equals.不管是数字还是字符串都能够使用==进行比对。
jstl中只有c:if,没有c:else。如果要实现类似else的分支,或者是类似switch的分支。
<c:choose>
    <c:when test=""></c:when>
    <c:when test=""></c:when>
    <c:otherwise>
       
    </c:otherwise>
</c:choose>
就能够达到要求了。

设置值
c:set
<c:set var="hello" value="你好!" scope="request"></c:set>
      ${hello }
把value中的值赋值给变量hello。
      <c:set target="${person}" property="username" value="xiaowang"></c:set>
      ${person.username }
把value中的值赋给target中的bean的property属性,但是target不能为null,否则会报错
<c:set target="${countryMap}" property="china" value="北京"></c:set>
      ${countryMap["china"] }
把value中的值赋给target中的map的proertykey所对应的值,同样target不能为null.
能设置就能删除。
      <c:set var="country" value="北京"></c:set>
      国家:${country }<br>
      <c:remove var="country"/>
      国家:${country }

引入servlet
<c:import url="http://localhost:8080/javaWeb/MyJsp.jsp"></c:import>
      <c:import url="/MyJsp.jsp">
          <c:param name="testValue" value="123123"></c:param>
      </c:import>
当url是本地文件的时候,与<jsp:include>功能相同,能够传递request,或者设置参数。

<c:url>
还能够给连接加入jsessionid
<a href="<c:url value='/MyJsp.jsp'/>">click me</a>
如果浏览器禁用了cookie会自动在连接后面加入cookie。
如果我们在链接中有一些编码之后样子的字符,比如说:<a href="MyJsp.jsp?hello=word%20url">click me</a>
获取值的时候会把%20识别为空格,但是如果我们想传入的值就是%20应该可以怎么做呢?
<c:url value="MyJsp.jsp" var="testUrl">
          <c:param name="hello" value="word%20q234"></c:param>
      </c:url>
      <a href="${testUrl }">click me</a>
使用这种方式加入参数就能够进行格式化了。

 

异常捕获
<c:catch var="myexception">
        <% out.print(1/0); %>
    </c:catch>
    <c:out value="${myexception}"></c:out>

JSTL国际化:

使用JSTL进行国际化还是比较简单的

  • 首先编写资源文件,推荐使用ResourceBundor插件。保存名为类似XX_zh_CN.properties的方式,例如:Test_zh_CN.properties.zh_CN为对应的语言标志。
  • 然后在页面中引入格式化标签库<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>、
  • 指定资源文件的位置:<fmt:setBundle basename="com.prince.servlet.resource.Test" var="testBundle"/>
  • 其中如果有多个资源文件,可以使用var进行区分,如果只有一个可以没有这个参数。basename中表示引用的资源文件的位置为:com/prince/servlet/resource/Test_zh_CN.properties。
  • jstl会根据当前浏览器的设置来进行资源文件的匹配,如果想要固定语言,可以使用<fmt:setLocale value="zh_CN" />来进行指定。
  • 使用的时候就可以<fmt:message key="test.common.message" bundle="${testBundle }">
            <fmt:param value="word 世界"></fmt:param>
        </fmt:message>来引用资源文件中对应key的值,其中还能给资源文件中的{0}进行赋值。
  • 这样就完成国际化操作了。

JSTL格式化

数字格式化:

  • 格式化金币<fmt:formatNumber type="currency" value="123.4567">还可以写成<fmt:formatNumber type="currency" value="123.4567" pattern="¥0.00">控制小数点位置。
  • 格式化百分比<fmt:formatNumber type="percent" value="123.4567"></fmt:formatNumber>
        <fmt:formatNumber type="percent" value="123.4567" pattern="0.00%">
  • 格式化数字<fmt:formatNumber value="123.4567" pattern="#.######">
  • 其中pattern中,0.00表示位数不够的使用0来代替,如果是#号则表示位数不够仍然显示。

日期格式化:

  • 普通的日期格式化:<c:set value="<%=new java.util.Date() %>" var="date"></c:set>
        <fmt:formatDate value="${date }" />
  • 加入type。<fmt:formatDate value="${date }" type="both"/>。both表示既有日期又有时间。还能取值为date或者是time
  • 加入timStyle。<fmt:formatDate value="${date }" type="both" timeStyle="long"/>timeStyle可以有多种取值,能够显示不同情况的时间格式。
  • 使用pattern进行格式化:<fmt:formatDate value="${date}" pattern="G yyyy年MM月dd日 E a HH:mm:ss.S z"/>其中G表示公园,yyyy是年份,MM是月份,dd是天, E是星期几,a表示上下午。HH表示小时大写的就是24进制的,mm表示分钟,ss表示秒,S是微秒, z是时区。
  • 另外使用格式化标签是能够直接作为值赋值给input的value属性的。
  • 还可以使用<fmt:parseDate 标签把字符串转化为日期。具体用法用到再说。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值