欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

jstl 入门:表示就是一切的一切_jstl 入门:探讨如何利用 core 库

更新时间: 2015-04-21 00:00:00 责任编辑: Author_N11

 


  JSP 标准标记库(JSP Standard Tag Library,JSTL)fmt 库通过一组颇受关注的定制标记提供了用于访问所有 Java 编程语言国际化功能的便利方式。Mark Kolb 研究了用于对数据进行格式化和国际化的 fmt 标记。

  

   在本系列的前几篇文章中,我们讨论了 JSTL 及其表达式语言(EL)。我们还研究了由 core 库定义的定制标记。具体而言,在“JSTL 入门:表达式语言”中我们指出 EL 提供了一种简化语言,用于在 JSP 应用程序中访问和操作数据并使该数据可被 JSTL 定制标记用作动态属性值。core 库包含了一些定制标记,用于管理限定了作用域的变量、显示 EL 值、实现迭代内容和条件内容以及与 URL 进行交互,这是“JSTL 入门:探讨 core”的主题。

  

   我们接下来将讨论的 JSTL 库是 fmt 库。fmt 库中的定制标记支持通过资源束对文本内容进行本地化,并支持对数字和日期的显示和解析。这些标记利用在 java.util 和 java.text 包中实现的 Java 语言的国际化 API,因此如果您已经很熟悉诸如 ResourceBundle、Locale、MessageFormat 和 DateFormat 这样的类,那么您将发现 fmt 库中有很多方面值得称道。如果您不熟悉这些类,那么 fmt 库的标记用直观的方式来封装国际化 API,这种方式使您能够很容易将本地化功能合并到 JSP 应用程序中。

  

   本地化

   在 Java 语言国际化 API 中,影响数据本地化方式的因素主要有两个。一个是用户的语言环境,另一个是用户的时区。语言环境表示某一特定区域或文化的语言习惯,包括日期、数字和货币金额的格式。一个语言环境始终会有一种相关联的语言,在许多情况下这种语言是由多个语言环境共享的某种语言的方言。例如,美国英语、英国英语、澳大利亚英语和加拿大英语都具有不同的英语语言环境,而法国、比利时、瑞士和加拿大所用的法语方言则都具有不同的法语语言环境。

  

   时区是数据本地化中的第二个因素,这仅仅是因为一些语言环境分布的地理区域很广。当您显示有关跨洲语言环境(比如澳大利亚英语)的时间信息时,针对用户时区定制数据与对其进行正确格式化一样重要。

  

   但是这就有了一个问题:应用程序如何确定用户的语言环境和时区?在 Java 应用程序的情况下,JVM 能够通过与本地操作系统进行交互来设置缺省语言环境和时区。虽然这种方法对于桌面应用程序而言可以正常工作,但是它实际上并不适合于服务器端的 Java 应用程序,因为这种应用程序所处理的请求,可能来自于距离该应用程序所驻留的服务器万里之遥的地方。

  

   幸运的是,HTTP 协议通过 Accept-Language 请求头将本地化信息从浏览器传递至服务器。许多 Web 浏览器允许用户定制他们的语言首选项,如图 1 所示。通常,那些没有为一种或多种首选语言环境提供显式设置的浏览器会询问操作系统以确定在 Accept-Language 头中发送哪个值(或哪些值)。servlet 规范通过 javax.servlet.ServletRequest 类的 getLocale() 和 getLocales() 方法自动地利用 HTTP 协议的这一功能。JSTL fmt 库中的定制标记又会利用这些方法来自动地确定用户的语言环境,从而相应地调整它们的输出。

  

   图 1. 通过设置浏览器的语言首选项来选择语言环境

    

    body content

  

  

   和 一样,您可以使用该标记来指定将由其它 JSTL 标记使用的时区。但是, 操作的作用域仅限于其标记体内容。在 标记体中,由标记的 value 属性指定的时区覆盖了 JSP 环境中现有的任何其它时区设置。

  

   和 的情况一样, 标记的 value 属性应当是时区名或者是 java.util.TimeZone 实例。后面的清单 1 中提供了一个如何使用 的示例。

  

   日期标记

   fmt 库包含了用来与日期和时间进行交互的两个标记:。顾名思义, 用来格式化和显示日期和时间(数据输出),而 用来解析日期和时间值(数据输入)。

  

   的语法如下所示:

  

        timeZone="expression"

     type="field" dateStyle="style"

     timeStyle="style"

     pattern="expression"

     var="name" scope="scope"/>

  

   只有 value 属性才是必需的。其值应当是
  为了演示 EL 的用法,我们介绍了 core 库中的三个标记: 用于管理限定了作用域的变量;而 用于显示数据,尤其是显示用 EL 计算出的值。在此基础上,接下来本文把注意力集中在 core 库的其余标记上,这些标记可以大致归为两大类别:流控制和 URL 管理。

  

   示例应用程序

   为了演示 JSTL 标记,我们将使用来自一个工作应用程序的示例,本系列中余下的文章都将使用此应用程序。由于基于 Java 的 Weblog 日渐流行及为人们所熟悉,因此我们将出于此目的使用一个简单的基于 Java 的 Weblog;参阅参考资料以下载该应用程序的 JSP 页面和源代码。Weblog(也称为 blog)是一种基于 Web 的简短注释的日志,这些注释是有关 Weblog 的作者所感兴趣的主题,通常带有与 Web 上其它地方的相关文章及讨论的链接。图 1 中显示了该应用程序正在运行时的抓屏。

  

   图 1. Weblog 应用程序

    

    body content

  

  

   当出现 step 时,它也必须是整数值。它指定每次迭代后索引的增量。这样,迭代索引从 begin 属性的值开始,以 step 属性的值为增量进行递增,在迭代索引超过 end 属性的值时停止迭代。注:如果省略了 step 属性,那么步长缺省为 1。

  

   如果指定了 var 属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。这一限定了作用域的变量具有嵌套式可视性 — 只可以在 标记体内对其进行访问。(我们很快将讨论可选属性 varStatus 的用法。)清单 2 显示了对一组固定整数值进行迭代的 操作示例。

  

   清单 2. 使用 标记来生成表列数据,这些数据对应于某一范围内的数值。

  

  

     

  

    

      

  

  

ValueSquare

  

   如图 3 中所示,上面的示例代码生成了一张表,显示前五个偶数及其平方。这是通过将 begin 和 step 属性值指定为 2,而将 end 属性值指定为 10 实现的。此外,用 var 属性创建用于存储索引值的限定了作用域的变量, 标记体内引用了该变量。尤其是,使用了一对 操作来显示索引及其平方,其中索引的平方是使用一个简单的表达式计算得来的。

  

   图 3. 清单 2 的输出

    

    body content

  

  

   标记支持 Java 平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。表 1 列出了 items 属性所支持的所有值。正如表的最后一行所指出的那样,JSTL 定义了它自己的接口 javax.servlet.jsp.jstl.sql.Result,用来迭代 SQL 查询的结果。(我们将在本系列后面的文章中详细讨论这一功能。)

  

   表 1. 标记的 items 属性所支持的集合

   

     

      

     

     

      

     

    

  

  

   图 4. 清单 4 的输出

    

     相关文章

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2015-04-21 00:00:00
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1332226/
本文WWW.DOC100.NET DOC100.NET版权所有。