JSTL改進JSP來簡化網頁的實現過程(3)

來源:互聯網
上載者:User
js|過程|網頁 流程式控制制

讓我們轉為討論JSTL的流程式控制制和條件標記。如果你已經用任何一種語言使用了條件和流程式控制制語句,理論上這裡沒什麼新鮮的東西。

c:if動作處理簡單條件陳述式的測試。計算測試屬性中的Boolean運算式的值,如果運算式為真的話,計算體的內容。在下面的動作中,我們也說明了備選項var屬性。為了以後的使用,var屬性儲存測試結果在頁(如果沒有指定其他scope屬性的話)中。

<c:if test="${status.totalVisits == 1000000}" var="visits">   You are the millionth visitor to our site!  Congratulations!</c:if>


下面我們展示了用c:choose、 c:when、 和 c:otherwise交換邏輯的JSTL的支援。一組c:when動作可能包括在一個備選的標記內,如果在c:when塊中任何錶達式計算值為真的話,就不用計算c:choose動作內的測試。如果c:when塊中沒有一個測試計算值為真的時候:如果出現c:otherwise動作內容時,則計算c:otherwise動作的內容:

<c:choose><c:when test="${item.type ==  book }">...</c:when><c:when test="${item.type ==  electronics }">...</c:when><c:when test="${item.type ==  toy }">...</c:when><c:otherwise>...</c:otherwise></c:choose>


c:foreach動作提供一個容易的方法來迭代一個集合的元素。如果你想只迭代集合的一部分的話,你可以分別用begin、 end、 和 step屬性指定起點、終點和一個遞增值。在下面的例子中,我們在變數customerNames中迭代一個集合的內容;在每個迴圈中,下一個元素輸入到變數名內並在c:foreach動作的體內計算:

<table><c:forEach var="name" items="${customerNames}"><tr><td><c:out value="${name}"/></td></tr></c:forEach></table>


記得Java的StringTokenizer類嗎?有了c:forTokens動作,你可以用JSTL獲得類似的功能。這個程式片斷可使用在delims屬性中定義的定界符通過items String屬性中的條目迭代。注意,items 屬性不必是一個字元直接量;它可以是任何有效EL運算式:

<table><c:forTokens items="47,52,53,55,46,22,16,2" delim="," var="dailyPrice"><tr><td><c:out value="${dailyPrice}"/></td></tr></c:forTokens></table>


在接下來的完整的JSTL頁中,我列出了已經傳遞到該頁的所有參數。param 和paramValues對象是映射關鍵字到一個或多個值的Java Map集。在本例中,我們找出了用於集合的每個MapEntry的關鍵字即參數名,並且使用關鍵字來尋找所有與關鍵字關聯的參數值:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><html><body><head><title>Parameter Listing Example</title></head><br><b>Parameter values passed to this page for each parameter: </b><table border="2"><c:forEach var="current" items="${param}">    <tr>    <td>    <b><c:out value="${current.key}" /></b>    </td>    <c:forEach var="aVal" items="${paramValues[current.key]}">     <td>     <c:out value="${aVal}" />      </td>   </c:forEach>  </tr></c:forEach></table></body></html>


其他動作

我們也需要討論一些其他重要的核心標記庫動作。在網頁實現中一個潛在的問題範圍與URL編碼有關。沒有URL編碼,在網頁中傳遞的URL的某個字元如空格,可能會迷惑Web伺服器。URL編碼確保這些特殊的字元用不引起迷惑的字元代替。下列例子在變數myUrl中定義了一個URL,該變數myUrl由一個URL和一系列參數組成。URL動作(注意,這裡只在JSTL意義上的動作)保證所有字元都正確的編碼:

<c:url value="http://acme.com/exec/register" var="myUrl"><c:param name="name" value="${param.name}"/><c:param name="country" value="${param.country}"/></c:url><a href= <c:out value="${myUrl}"/> >Register</a>


在上面的代碼中,param動作簡單的定義了一組名值對。

JSP允許設計者用指令包括其他頁的內容。JSTL用JSTL c:import動作擴充了這個概念。c:import的主要優勢是:你能指定一個任意的URL;也可以包含你的Web應用之外(W3C的任何地方)的頁的內容或者你的伺服器上的另一個Web應用內的頁的內容。

對於一組與HTTP相關的標記來說,沒有一個方法處理HTTP重新導向是不完整的。JSTL用c:redirect動作支援它。

國際化標記庫

在討論了JSTL支援國際化中,我假設你已經有了對下列主題的合理的理解:

●資源套件和Java如何找到它們

●Locale類

●資源套件尋找和MessageFormat類

●局部編碼以及它與Java國際化的關係

●Java文本和資料格式化

我在下面的兩個部分討論了國際化標記庫。在第一部分,我包括了你可能使用的格式化和解釋相關的動作(它最初對應於java.text封裝包中的類),儘管你沒有開發過完全的國際化應用程式,可能你也要用到它。在第二部分,我說明了更針對於國際化的動作。

如果存在一個遠端可能性,你的應用程式會在你本國之外使用。如果你從一開始就建立在國際化的支援上,那麼開發就會更加容易。無論你使用何種方法來開發,即使像JSTL一樣容易使用的方法,一開始建立在國際化支援上也是十分有益的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.