JSTL

    技术2022-05-20  52

    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>写成转义的<等符号才能够显示出来。而不是换行。 使用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 url">click me</a> 获取值的时候会把 识别为空格,但是如果我们想传入的值就是 应该可以怎么做呢? <c:url value="MyJsp.jsp" var="testUrl">           <c:param name="hello" value="word q234"></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)