'Standard' taglib (JSTL RI): Release Notes
The JSTL 1.0 Beta 1 RI builds on the 1.0 EA3 release, which introduced a
variety of new features and rounded out some of the support initially
provided in 1.0 EA2. This document contains a running list of additions and
changes.
- Nightly Build Changes and Enhancements since JSTL EA3 RI,
Version 1.0 Release
- General:
- Support for 'var' and 'scope' has been normalized in tag handlers, TLDs,
and TLVs.
- ScriptFreeTLV, and the new PreferredTaglibTLV, are now part of the
javax.servlet.* class hierarchy as directed by the working spec.
- JARs distributed by Sun were removed from the CVS archive and the build
process changed to accommodate this removal. Licenses are now included
for those non-Apache JARs that remain checked into CVS.
- EL Support:
- Default EL implementation.
- See the JSTL 1.0 Specification Appendix A for complete definition
- Highlights:
- <c:out> replaces <c:expr>
- new "${expr}" syntax
- implicit objects references using "." replacing ":"
- EcmaScript EL enhancements:
- Direct associative container access.
- List object access using the [] operator.
- Overhaul of EcmaScript implementation:
- Multiple scopes for script execution.
- javascript pagecontext scope.
- Separation of script compilation and execution.
- Validation and caching.
- Performance improvements.
- JavascriptExpressionEvaluator implementation depended on public but
non-documented Rhino classes to unwrap objects. Removed dependency on
NativeString and NativeBoolean.
- Core Actions:
- <c:url> replaces <c:urlEncode>
- added <c:catch>
- <c:urlEncode> now supports <c:param>, but this support will
likely be modified before the spec is finished.
- <c:param> now accepts body content.
- IteratorTag, IteratorTagStatus, and IteratorTagSupport are
now called LoopTag, LoopTagStatus, and LoopTagSupport.
- LoopTag (and classes that use it) now provides a prepare() method that
lets developers set up an iteration.
- ConditionalTagSupport now provides a setScope() method in addition to
setVar().
- With some caveats yet to be addressed by the spec, <c:forEach> and
other tags that expose "nested" scoped attributes are now
nondestructive with respect to the attributes they overwrite.
- XML Actions:
- <x:set> now outputs Number, String, and Boolean in cases where it
would previously output an ArrayList with one element of any of these
types. This change was called for by the community-draft spec.
- Output of x:parse is now supported as input to x:transform.
- The name for the TEI class for <x:transform> was corrected.
- <x:set> now does NOT accept body content.
- <x:parse> now trims its body content.
- <x:parse>'s 'domVar' attribute was renamed to 'varDom'; 'scopeDom'
was added. <x:parse> incorrectly required its 'var' attribute;
this has been fixed.
- <x:transform>'s 'xslt' attribute is now optional, which was the
intended behavior all along.
- <x:parse> single 'source' attribute was replaced by 'xmlText' and
'xmlUrl' for accepting generic objects (e.g., DOMs) and URLs
respectively.
- <x:transform>'s 'source' attribute was modified similarly to
<x:parse>'s, and its 'xslt' attribute was replaced by 'xsltText' and
'xsltUrl' similarly.
- SQL Actions:
- Modified Result interface:
- getRows() returns a Map[] where rows[index].colName returns a column's value
- getRowsByIndex() returns Object[][] where rowsByIndex[rowIndex][colIndex] returns a column's value
- getMetaData() returns ColumnMetaData[] where metaData[colIndex] returns column's metadata
- getRowsCount() replaces getSize()
- Removed Row, Column, ResultMetaData interfaces.
- <sql:update>: Made 'var' attribute optional.
- <sql:query>: Fixed 'startRow' indexing, and allow 'startRow' and
'maxRows' to take EL expressions.
- <sql:transaction>: Allow 'transactionIsolation' to take EL
expression.
- <sql:query>: 'startRow' follows 0-based indexing, as directed by
the working spec.
- If 'dataSource' is specified in <sql:query> or <sql:update>,
it must not be nested inside an <sql:transaction>, as directed by
the working spec.
- javax.servlet.jsp.jstl.sql.Row: get() methods now return the value of the
designated column as a Java object (as opposed to an instance of
javax.servlet.jsp.jstl.sql.Column), as directed by the working spec.
- Implemented 0-based indexing (as opposed to the JDBC 1-based indexing)
for Rows and Columns, in order to be consistent with the behavior of
other JSTL tags.
- Changed prefix from javax.servlet.jsp.jstl.sql.driver to
javax.servlet.jsp.jstl.sql for the 'driver', 'url', 'user', and
'password' context init parameters.
- <sql:driver>: Implementation now uses 'url' (as opposed to
'jdbcURL') attribute, to comply with Functional Description.
- <sql:driver>: Added support for 'scope' attribute.
- <sql:param>: Implementation now treats 'value' attribute as
optional, to comply with the Functional Description.
- Implementation of <sql:query> and <sql:update> now searches
for scoped DataSource object, and performs JNDI lookup if it is a
String.
- <sql:transaction>: Implementation now supports
'transactionIsolation' attribute.
- Clarified SQL documentation by including information on where to place
drivers as well as the examples Table structure.
- I18N-Capable Formatting Actions:
- Removed <fmt:exception> as well as
javax.servlet.jsp.jstl.fmt.LocalizableException.
- <fmt:message>: Removed 'messageArgs' attribute.
- Removed <fmt:messageFormat>.
- Renamed <fmt:messageArg> to <fmt:param>.
- 'dateStyle' and 'timeStyle' are now defined to be dynamic in
<fmt:formatDate> and <fmt:parseDate>.
- Renamed 'i18n' to 'fmt' in all scoped attribute and config parameter
names (for example, javax.servlet.jsp.jstl.i18n.basename now is
javax.servlet.jsp.jstl.fmt.basename).
- Moved LocaleSupport class from org.apache.taglibs.standard.extra.i18n to
javax.servlet.jsp.jstl.fmt.
- <fmt:formatNumber>: Added 'currencyCode', 'currencySymbol',
'groupingUsed', 'maxIntegerDigits', 'minIntegerDigits',
'maxFractionDigits', 'minFractionDigits' attributes.
- <fmt:parseNumber>: Added 'integerOnly' attribute.
- Aligned locale determination algorithm for I18N and formatting
locales. The algorithm now gives preference to a
"language match" over an "exact match" that might
have occurred later on in the list of
available locales. The only difference between the I18N and formatting
logic is that in the I18N case, the container's default locale is always
ignored, whereas in the formatting case, it is used only as a last
resort.
- Made 'key' optional in <fmt:message>, and 'value' optional in
<fmt:formatNumber>, <fmt:parseNumber>, and
<fmt:parseDate> (already used to be optional in <fmt:param>).
If missing, it is read from the tag's body content.
- <fmt:message>: Implemented constraint that if 'key' attribute is
present and action has body, its body content must be empty after
trimming.
- <fmt:formatDate> and <fmt:parseDate> now support both
java.lang.String and java.util.TimeZone values specified via the
'timeZone' attribute.
- Added javax.servlet.jsp.jstl.i18n.locale context configuration
parameter, which allows application locale to be specified in
deployment descriptor file.
- Removed 'parseLocale' attribute from <fmt:formatDate> and
<fmt:formatNumber>. If the value to be formatted is given as a
String, it is now always parsed using the default pattern of the
"en" locale. If the String is formatted with a different
pattern, it must first be parsed to a java.util.Date or java.lang.Number
with <fmt:parseDate> or <fmt:parseNumber>, and the result can
then be used with <fmt:formatDate> or <fmt:formatNumber>,
respectively.
- <fmt:formatDate> now is defined to have a body. If its 'value'
attribute is missing, and its body content is empty after trimming,
<fmt:formatDate> formats the current time and date.
- 12 Dec 2001
- JSTL 1.0 EA3 RI, version 1.0, introduced. Version includes the following
changes and additions:
- Introduction of SQL tags ("sql:*" library).
- A performance improvement to the XML "transform" tag.
- Minor changes and bug fixes to the i18n and XML libraries.
- Distribution JAR files are now 'standard.jar' (RI) and 'jstl.jar'
(API).
- showSource.jsp no longer depends on raw file I/O (and so
should work even when standard-examples is deployed as a WAR).
- 21 Nov 2001
- JSTL 1.0 EA2 RI, version 1.0, introduced. Version includes the following
major changes and additions:
- JSPTL has been renamed to JSTL.
- The "jsptl" library at Jakarta Taglibs has been renamed to
"standard."
- Tags for text inclusion and URL encoding introduced.
- Tags for i18n-capable text formatting introduced.
- Tags for XML manipulation introduced.
- JSTL now divides functionality among multiple TLDs. Each TLD represents
a cohesive unit of functionality, such as "XML manipulation" and
"formatting." 'jx' and 'jr' are no longer used; they are replaced
with shorter abbreviations for the common cases (e.g., 'c', 'x').
- ECMAScript is now the default expression evaluator. Since the
first release of 1.0 EA1, new languages include JXPath and ECMAScript.
- The RI has been thoroughly repackaged; many classes have moved.
- The package name for the JSTL API is now javax.servlet.jsp.jstl
and is subdivided into cohesive packages. (The old package for the
API was javax.servlet.jsptl.)
- A small number of minor changes were made to the code. By and large,
these changes are not significant; the easiest way to discover
further details is to look at the CVS archive itself.
- 09 Oct 2001
- JSTL 1.0 EA1 RI, version 1.2, introduced. This version includes support
for ECMAScript.
- 23 Jul 2001
- JSTL 1.0 EA1 RI, version 1.1, is released. This version is compatible
with Tomcat 4.0 B6 and Tomcat 4.0 release.
- 10 Jul 2001
- JSTL 1.0 EA1 RI first made available for download.
- 08 Jul 2001
- Initial version of JSTL RI contributed by JSR-052 Expert Group
and imported into Jakarta CVS archive.