1. 程式人生 > >JSTL標籤庫:core和fmt包中標籤的簡單使用

JSTL標籤庫:core和fmt包中標籤的簡單使用

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");
			}
			
		}
		
	}