網頁

2017/8/16

JSTL 格式化標籤 formatting tags

本篇介紹JSTL(JSP Standard Tag Library)的格式化標籤(formatting tags)。

閱讀這篇文章前要先了解以下...

  • JSP指令(JSP Directives)
  • JSP Scripting Elements
  • JSP物件與作用範圍(JSP Objects and Scopes)
  • Expression Language (EL)

JSTL格式化標籤屬於I18N國際化標籤函式庫(I18N tags)中的一個子功能,主要用來作一些數字及日期的格式化輸出,包括以下

  • <fmt:formatNumber>
  • <fmt:formatDate>
  • <fmt:parseDate>
  • <fmt:parseNumber>
  • <fmt:setTimeZone>
  • <fmt:timeZone>

使用JSTL前記得先把JSTL的jar檔匯入應用程式的函式庫(library),可以到這下載

jar檔匯入後,JSP頁面要用taglib指令參照格式化標籤的URI,也就是把下面這行貼到JSP頁面的上方

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

如果貼上上面那段taglib敘述後出現錯誤如下,通常是因為...

  • jar檔沒有匯入
  • jar檔匯入的位置不正確
  • jar檔版本有問題



<fmt:formatNumber>標籤


<fmt:formatNumber>有下列屬性(attributes)

  • value:參數為原始數值,為必要的屬性,無預設值。
  • type:參數有三種,分別是number(數字),currency(貨幣)及percent(百分筆),預設為number。若設定為currency,則預設貨幣格式為系統語言設定地區的格式,例如在台灣為zh-TW。若要改變顯示的幣別要先用<fmt:setLocale>標籤來設定ISO639搭配ISO-3166的語言國別碼。
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSTL格式化標籤</title>
    </head>
    <body>
     <p>數字格式,type = number: <fmt:formatNumber value="123.456" type="number" /></p>
     <p>百分比格式,type = percent: <fmt:formatNumber value="123.456" type="percent" /></p>
     <p>貨幣格式,type = currency: <fmt:formatNumber value="123.456" type="currency"/></p>
     <fmt:setLocale value="en_US"/>
     <p>美元 en_US: <fmt:formatNumber value="123.456" type="currency"/></p>
     <fmt:setLocale value="ja_JP"/>
     <p>日元 ja_JP: <fmt:formatNumber value="123.456" type="currency"/></p>
     <fmt:setLocale value="de_DE"/>
     <p>歐元 de_DE: <fmt:formatNumber value="123.456" type="currency"/></p>
     <fmt:setLocale value="ko_KR"/>
     <p>韓元 ko_KR: <fmt:formatNumber value="123.456" type="currency"/></p>
     <fmt:setLocale value="zh_CN"/>
     <p>人民幣 zh_CN: <fmt:formatNumber value="123.456" type="currency"/></p>
    </body>
    </html>
    

  • pattern使用下列符號來自定輸出格式
    • 0:表示一個位數,若無該位數則顯示0
    • E:指數表示
    • #:表示一個位數
    • .:小數位符號,只能有一個,若有兩個或以上則會出現錯誤
    • ,:分位符號
    • ;:分格符號 (不知道幹嘛用的)
    • -:負號
    • %:以百分比表示
    • ?:原數值乘1000並以每千分之的方式表示
    • ¤:加上貨幣單位 (好特別的參數)
    • X:前墜字或後墜字,可以是關鍵符號外的任意其他字
  • currencyCode:使用ISO 4127貨幣代碼,當type為currency時才會使用。
  • currencySymbol:貨幣符號,當typecurrency時才會使用。
  • groupingUsed:參數為truefalse,若設定為true則每千分位會加上個逗點,例如123,456,若為false則為123456。預設為true
  • maxIntegerDigits:最大整數輸出位數,非必要屬性。例如原始值為123456,maxIntegerDigits設定為2,則輸出為56。
  • minIntegerDigits:最小整數輸出位數,非必要屬性。例如原始值為123456,minIntegerDigits設定為10,則輸出為0,000,123,456。
  • minFractionDigits:最小小數輸出位數,非必要屬性。例如原始值為1.23456,minFractionDigits設定為10,則輸出為1.2345600000。 範例...
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSTL格式化標籤</title>
    </head>
    <body>
      <p>maxIntegerDigits="2": <fmt:formatNumber value="1234.5678" maxIntegerDigits="2"/></p>
      <p>minIntegerDigits="10": <fmt:formatNumber value="1234.5678" minIntegerDigits="10"/></p>
      <p>maxFractionDigits="2": <fmt:formatNumber value="1234.5678" maxFractionDigits="2"/></p>
      <p>minFractionDigits="10": <fmt:formatNumber value="1234.5678" minFractionDigits="10"/></p>
    </body>
    </html>
    

  • var:變數名稱,將格式化的結果存為字串並設定在servlet的attribute內,設定範圍參考scope屬性,可用getAttribute()方法取出,或在JSP用EL取出。若有設定此屬性則不會將格式化結果輸出至畫面。
  • scope:var變數的儲存範圍,範圍有pagerequestsessionapplication四種,預設為page。此屬性則一定要同時設定var屬性,例如scope設為page,並將var的名稱設為"f"。則在JSP可利用Expressoins輸出...

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


沒有留言:

張貼留言