JSTL標籤庫:core和fmt包中標籤的簡單使用
阿新 • • 發佈:2018-12-15
JSTL標籤-核心標籤庫
1.JSTL標籤庫
<c:set />用來存放變數
屬性:
var表示定義的變數名
value表示存入的值
scope表示存入的容器:page request session application
<c:out />用來取出變數
屬性:
value="${timo}" EL表示式取值
default="沒找到" 當取不到值時,給一個預設值
escapeXml="true" 是否對取出的值進行Xml解析;預設為true,不進行Xml解析。
<c:if test=""></c:if>
屬性:
test表示條件語句,如果為真則執行標籤內的語句
<c:choose>
<c:when test="">
語句1
</c:when>
<c:when test="">
語句2
</c:when>
<c:otherwise>
語句3
</c:otherwise>
</c:choose>
屬性: test表示條件語句,為真則執行。
choose語句很像java中的switch語句。
<c:forEach items="${list}" var="i"> ${i.name}-----${i.price}<br/> </c:forEach>
屬性: items表示取出的集合,var表示當前的迴圈變數i
用EL表示式 ${i.屬性名}可以取出值。(i的屬性必須有get方法,不然無法取值)
<h1>foreach begin 迴圈</h1>
<c:forEach begin="1" end="10" varStatus="i" step="2">
${i.index} ------ ${i.count} <br/>
</c:forEach>
屬性: begin表示從哪開始,end表示到哪結束;
varStatus表示當前的迴圈變數,step表示迴圈變數i每次加2。
i.index表示當前i的值;i.count表示當前i的記錄數(一共有幾個i)
上面的執行結果:
1-----1
3-----2
5-----3
7-----4
9-----5
<h1>JSTL學習</h1>
<h3>放變數</h3>
<c:set var="timo" value="<h2>提莫</h2>" scope="page"/>
EL --- ${timo} <br/>
out標籤:<c:out value="${timo}" default="沒找到" escapeXml="true" />
<c:set var="week" value="4" scope="page"/>
<h3>if判斷</h3>
<c:if test="${week== 3}">
開黑
</c:if>
<br/>
<c:choose>
<c:when test="${week==1}">
看延熙攻略
</c:when>
<c:when test="${week==2}">
看電影
</c:when>
<c:when test="${week==3}">
去網咖LOL
</c:when>
<c:otherwise>
睡覺
</c:otherwise>
</c:choose>
<h1>forEach迴圈</h1>
<%
List equips = new ArrayList();
Equip dlj = new Equip("多蘭戒",400);
Equip wj = new Equip("無盡之刃",3400);
Equip srs = new Equip("梅德爾的竊魂卷",1400);
equips.add(dlj);
equips.add(wj);
equips.add(srs);
request.setAttribute("equips", equips);
Map emap = new HashMap();
emap.put("1", dlj);
emap.put("2", wj);
emap.put("3", srs);
request.setAttribute("emap", emap);
%>
<c:forEach items="${equips}" var="equip">
${equip.name}-----${equip.price}<br/>
</c:forEach>
<c:forEach items="${emap}" var="emap">
${emap.key}-----${emap.value.name}-----${emap.value.price}<br/>
</c:forEach>
<h1>foreach begin 迴圈</h1>
<c:forEach begin="1" end="10" varStatus="i" step="2">
${i.index} ------ ${i.count} <br/>
</c:forEach>
2.JSTL標籤庫——fmt
fmt包中的格式化標籤
<h1>測試格式化標籤 formatDate formatNumber</h1>
<h2>formatDate</h2>
<%
request.setAttribute("now", new Date());
%>
預設的時間:${now}
<br/>
格式化的時間:<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
<h2>formatNumber</h2>
<c:set var="balance" value="12306.2309" />
<p>格式化數字 (1):<fmt:formatNumber value="${balance}" type="currency"/>
<p>格式化數字 (2): <fmt:formatNumber type="number"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化數字 (3): <fmt:formatNumber type="number"
maxFractionDigits="3" value="${balance}" /></p>
<p>格式化數字 (4): <fmt:formatNumber type="number"
groupingUsed="false" value="${balance}" /></p>
<p>格式化數字 (5): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化數字 (6): <fmt:formatNumber type="percent"
minFractionDigits="10" value="${balance}" /></p>
<p>格式化數字 (7): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" /></p>
<p>格式化數字 (8): <fmt:formatNumber type="number"
pattern="###.###E0" value="${balance}" /></p>
<p>美元 :
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="${balance}" type="currency"/></p>
fmt包中的國際化支援
需要在專案的src目錄下寫properties配置檔案
檔案命名格式:字首(隨便寫)_語言_國家程式碼.properties
例子:
gyx_en_US.properties:
title=Internationalized website
welcome=Welcome to login
username=User Name
pass=Pass Word
submit=Login
gyx_ja_JP.properties:
title=\u56FD\u969B\u5316\u30B5\u30A4\u30C8
welcome=\u767B\u9332\u3092\u6B53\u8FCE\u3059\u308B
username=\u3086\u30FC\u3056\u3081\u3044
pass=\u30D1\u30B9\u30EF\u30FC\u30C9
submit=\u767B\u9332\u3059\u308B
gyx_zh_CN.properties
title=\u56FD\u9645\u5316\u7F51\u7AD9
welcome=\u6B22\u8FCE\u767B\u5F55
username=\u7528\u6237\u540D
pass=\u5BC6\u7801
submit=\u767B\u5F55
jsp頁面程式碼:
<c:choose>
<c:when test="${param.lang == 'zh'}">
<fmt:setLocale value="zh_CN"/>
</c:when>
<c:when test="${param.lang == 'en'}">
<fmt:setLocale value="en_US"/>
</c:when>
<c:when test="${param.lang == 'jp'}">
<fmt:setLocale value="ja_JP"/>
</c:when>
<c:otherwise>
<fmt:setLocale value="zh_CN"/>
</c:otherwise>
</c:choose>
<fmt:setBundle basename="gyx"/>
<h1><fmt:message key="title"/></h1>
<a href="MyJsp.jsp?lang=zh">中文</a> <a href="MyJsp.jsp?lang=en">English</a> <a href="MyJsp.jsp?lang=jp">ほうぶん</a>
<h2><fmt:message key="welcome"/></h2>
<form>
<fmt:message key="username"/>:<input type="text" name="username" />
<fmt:message key="pass"/>: <input type="password" name="password" />
<input type="submit" value="<fmt:message key='submit'/>" />
</form>
response.setCharacterEncoding("utf-8");
//專案真實路徑
String realPath = getServletContext().getRealPath("/upload");
//宣告disk
DiskFileItemFactory disk = new DiskFileItemFactory();
File file = new File("d://tmp");
if (!file.exists()) { //判斷檔案是否存在
file.mkdir();
}
disk.setRepository(file); //臨時檔案目錄
//宣告一個解析request的servlet
ServletFileUpload upload = new ServletFileUpload(disk);
//解析request
List<FileItem> list = null;
try {
list = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
//宣告一個map用於封裝資訊
Map<String, Object> maps = new HashMap<String, Object>();
for (FileItem f : list) {
if (f.isFormField()) {
//可以讀取多個普通的input
String fileName = f.getFieldName();
String value = f.getString("utf-8");
System.out.println(fileName+"="+value);
//放入map集合
maps.put(fileName, value);
}else{
if (f.getSize()<=5120000) { //檔案大小不能超過 5M
//說明是一個檔案
String fileName = f.getName();//以前的名稱
//處理檔名
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
maps.put("oldName", fileName);
// 修改名稱
String extName = fileName.substring(fileName.lastIndexOf("."));
String newName = UUID.randomUUID().toString().replace("-", "")
+ extName;
// 儲存新的名稱
maps.put("newName", newName);
try {
f.write(new File(realPath+"/"+fileName));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("檔名是:" + fileName);
System.out.println("檔案大小是:" + f.getSize());
maps.put("size", f.getSize());
f.delete();
}else{
System.out.println("檔案超過5M !!!");
response.sendRedirect("upload.jsp");
}
}
}