其他动作
我们也需要讨论一些其他重要的核心标记库动作。在网页实现中一个潜在的问题范围与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允许设计者用 <JSP:INCLUDE></JSP:INCLUDE>
<JSP:INCLUDE>指令包括其他页的内容。JSTL用JSTL c:import动作扩展了这个概念。c:import的主要优势是:你能指定一个任意的URL;也可以包含你的Web应用之外(W3C的任何地方)的页的内容或者你的服务器上的另一个Web应用内的页的内容。
对于一组与HTTP相关的标记来说,没有一个方法处理HTTP重定向是不完整的。JSTL用c:redirect动作支持它。
国际化标记库
在讨论了JSTL支持国际化中,我假设你已经有了对下列主题的合理的理解:
●资源包和Java如何找到它们
●Locale类
●资源包查找和MessageFormat类
●局部编码以及它与Java国际化的关系
●Java文本和数据格式化
如果你需要这些主题的更多的信息,请阅读Resources (http://www.javaworld.com/javaworld/jw-02-2003/jw-0228-jstl-p4.html#resources#resources)上的参考部分与国际化有关的参考文章。
我在下面的两个部分讨论了国际化标记库。在第一部分,我包括了你可能使用的格式化和解释相关的动作(它最初对应于java.text封装包中的类),尽管你没有开发过完全的国际化应用程序,可能你也要用到它。在第二部分,我说明了更针对于国际化的动作。
如果存在一个远程的可能性,你的应用程序会在你本国之外使用。如果你从一开始就建立在国际化的支持上,那么开发就会更加容易。无论你使用何种方法来开发,即使像JSTL一样容易使用的方法,一开始建立在国际化支持上也是十分有益的。
格式标记库:格式动作
如果你已经使用了Java的 DateFormat 和NumberFormat类,在下面的标记中使用的方法应该看起来眼熟,因为JSTL格式化动作是在这些类之上建立的。这些Java类普遍提供一个format( )函数,它将一个Java类型转化为一个格式化的String和创建对应于该String的Java对象。
fmt:formatNumber动作有一个value属性和一个pattern属性。value属性是一个与我们看到的其它value属性类似的EL表达式或者变量。pattern属性与在NumberFormat类中定义的模式一样。下列动作发送一个格式化的String到JSP页的输出上: <fmt:formatNumber value="1000.001" pattern="#,#00.0#"/>
在这个fmt:formatNumber动作里,我们使用了type属性来指定:格式化我们需要格式化的值为一个货币值。我们保存格式化的结果在一个变量名为dollars中。在一个美国的locale类中,下面的程序生成一个字符串$3456.79(注意,它将使用的货币值四舍五入了):
<fmt:formatNumber value="3456.789" type="currency" var="dollars"/>
用于上面的type属性的可能值包括