You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ol...@apache.org on 2020/04/10 02:47:45 UTC
[tomcat-taglibs-standard] branch master updated: add back
standard-examples to be sure examples compile but do not deploy it
This is an automated email from the ASF dual-hosted git repository.
olamy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat-taglibs-standard.git
The following commit(s) were added to refs/heads/master by this push:
new dfff4b2 add back standard-examples to be sure examples compile but do not deploy it
dfff4b2 is described below
commit dfff4b22e69a5c1b8562c7d5bd876304149e0ca1
Author: olivier lamy <ol...@apache.org>
AuthorDate: Fri Apr 10 12:47:32 2020 +1000
add back standard-examples to be sure examples compile but do not deploy it
Signed-off-by: olivier lamy <ol...@apache.org>
---
pom.xml | 1 +
standard-examples/pom.xml | 122 ++++++++++
.../taglibs/standard/examples/beans/Address.java | 198 ++++++++++++++++
.../taglibs/standard/examples/beans/Customer.java | 255 +++++++++++++++++++++
.../taglibs/standard/examples/beans/Customers.java | 104 +++++++++
.../taglibs/standard/examples/i18n/Resources.java | 40 ++++
.../standard/examples/i18n/Resources_de.java | 40 ++++
.../standard/examples/i18n/Resources_fr.java | 40 ++++
.../standard/examples/i18n/Resources_it.java | 34 +++
.../taglibs/standard/examples/startup/Init.java | 148 ++++++++++++
.../standard/examples/taglib/CustomerFmtTag.java | 127 ++++++++++
.../standard/examples/taglib/DefaultLocaleTag.java | 42 ++++
.../standard/examples/taglib/EscapeHtmlTag.java | 136 +++++++++++
.../taglibs/standard/examples/taglib/EvenTag.java | 45 ++++
.../taglibs/standard/examples/taglib/FileTag.java | 121 ++++++++++
.../standard/examples/taglib/Functions.java | 78 +++++++
.../standard/examples/taglib/LocalesTag.java | 63 +++++
.../examples/taglib/NullAttributeException.java | 43 ++++
.../taglibs/standard/examples/taglib/OddTag.java | 49 ++++
.../standard/examples/taglib/ResourceTag.java | 140 +++++++++++
.../standard/examples/taglib/UsCustomerTag.java | 97 ++++++++
.../taglibs/standard/examples/util/IOBean.java | 63 +++++
.../util/ServletResponseWrapperForWriter.java | 57 +++++
.../taglibs/standard/examples/util/Util.java | 63 +++++
standard-examples/src/main/webapp/ShowSource.jsp | 36 +++
.../src/main/webapp/Templates/ExamplesTemplate.dwt | 38 +++
.../src/main/webapp/WEB-INF/tlds/jstl-examples.tld | 165 +++++++++++++
standard-examples/src/main/webapp/WEB-INF/web.xml | 22 ++
.../src/main/webapp/conditionals/Choose.jsp | 27 +++
.../main/webapp/conditionals/CustomLogicTag.jsp | 36 +++
.../src/main/webapp/conditionals/FailureLocal.jsp | 27 +++
.../src/main/webapp/conditionals/If.jsp | 19 ++
.../src/main/webapp/conditionals/index.html | 66 ++++++
.../src/main/webapp/elsupport/Out.jsp | 34 +++
.../src/main/webapp/elsupport/Set.jsp | 34 +++
.../src/main/webapp/elsupport/Set2.jsp | 16 ++
.../src/main/webapp/elsupport/index.html | 64 ++++++
standard-examples/src/main/webapp/format/Demo.jsp | 124 ++++++++++
.../src/main/webapp/format/FormatDateTime.jsp | 75 ++++++
.../webapp/format/FormatDateTimeBrowserLocale.jsp | 74 ++++++
.../src/main/webapp/format/FormatNumber.jsp | 41 ++++
.../webapp/format/FormatNumberBrowserLocale.jsp | 52 +++++
.../src/main/webapp/format/GermanLocale.jsp | 18 ++
.../src/main/webapp/format/GermanUmlautCorrect.jsp | 23 ++
.../main/webapp/format/GermanUmlautIncorrect.jsp | 21 ++
.../src/main/webapp/format/ItalianLocale.jsp | 15 ++
.../main/webapp/format/MissingResourceBundle.jsp | 22 ++
.../main/webapp/format/ParametricReplacement.jsp | 66 ++++++
.../src/main/webapp/format/PrefixAttribute.jsp | 16 ++
.../src/main/webapp/format/RequestEncoding.jsp | 20 ++
.../src/main/webapp/format/UndefinedKey.jsp | 15 ++
.../src/main/webapp/format/index.html | 115 ++++++++++
.../src/main/webapp/functions/EscapeXml.jsp | 41 ++++
.../src/main/webapp/functions/Length.jsp | 37 +++
.../src/main/webapp/functions/Replace.jsp | 55 +++++
.../src/main/webapp/functions/SplitJoin.jsp | 87 +++++++
.../main/webapp/functions/StringCapitalization.jsp | 55 +++++
.../src/main/webapp/functions/StringSubset.jsp | 183 +++++++++++++++
.../main/webapp/functions/SubstringContained.jsp | 227 ++++++++++++++++++
.../src/main/webapp/functions/Trim.jsp | 56 +++++
.../src/main/webapp/functions/index.html | 95 ++++++++
standard-examples/src/main/webapp/global.css | 15 ++
standard-examples/src/main/webapp/images/code.gif | Bin 0 -> 292 bytes
.../src/main/webapp/images/execute.gif | Bin 0 -> 1242 bytes
.../src/main/webapp/images/return.gif | Bin 0 -> 1231 bytes
.../src/main/webapp/import/Absolute.jsp | 19 ++
.../src/main/webapp/import/AbsoluteFtp.jsp | 18 ++
.../src/main/webapp/import/ContextRelative.jsp | 20 ++
.../src/main/webapp/import/Encode.jsp | 47 ++++
.../main/webapp/import/EncodeContextRelative.jsp | 20 ++
.../src/main/webapp/import/ExposeString.jsp | 20 ++
.../main/webapp/import/ExposeStringRelative.jsp | 17 ++
.../src/main/webapp/import/LocalSample.jsp | 14 ++
standard-examples/src/main/webapp/import/Param.jsp | 13 ++
.../src/main/webapp/import/Relative.jsp | 18 ++
.../src/main/webapp/import/StartSlash.jsp | 16 ++
.../src/main/webapp/import/index.html | 124 ++++++++++
standard-examples/src/main/webapp/import/index.jsp | 99 ++++++++
.../src/main/webapp/import/links.html | 57 +++++
.../src/main/webapp/import/relativeLinks.html | 12 +
.../src/main/webapp/import/session.jsp | 33 +++
standard-examples/src/main/webapp/index.html | 124 ++++++++++
.../src/main/webapp/iterators/BoundaryCases.jsp | 60 +++++
.../src/main/webapp/iterators/Collaboration.jsp | 44 ++++
.../src/main/webapp/iterators/DataTypes.jsp | 40 ++++
.../src/main/webapp/iterators/Extensability.jsp | 51 +++++
.../src/main/webapp/iterators/ForTokens.jsp | 25 ++
.../src/main/webapp/iterators/Simple.jsp | 18 ++
.../src/main/webapp/iterators/SimpleRange.jsp | 16 ++
.../src/main/webapp/iterators/Status.jsp | 54 +++++
.../src/main/webapp/iterators/index.html | 111 +++++++++
.../src/main/webapp/sql/DriverSetup.jsp | 22 ++
.../src/main/webapp/sql/QueryDirect.jsp | 89 +++++++
.../src/main/webapp/sql/QueryIterate.jsp | 104 +++++++++
.../src/main/webapp/sql/QueryParam.jsp | 72 ++++++
.../src/main/webapp/sql/Transaction.jsp | 60 +++++
standard-examples/src/main/webapp/sql/Update.jsp | 115 ++++++++++
standard-examples/src/main/webapp/sql/index.jsp | 108 +++++++++
standard-examples/src/main/webapp/sql/links.html | 43 ++++
standard-examples/src/main/webapp/sql/session.jsp | 17 ++
.../src/main/webapp/tlv/PermittedTaglibsError.jsp | 28 +++
.../src/main/webapp/tlv/PermittedTaglibsOk.jsp | 30 +++
.../src/main/webapp/tlv/ScriptFreeError.jsp | 15 ++
.../src/main/webapp/tlv/ScriptFreeOk.jsp | 25 ++
standard-examples/src/main/webapp/tlv/index.html | 78 +++++++
standard-examples/src/main/webapp/xml/Filter.jsp | 33 +++
standard-examples/src/main/webapp/xml/ForEach.jsp | 85 +++++++
.../src/main/webapp/xml/ForEachDoc.xml | 15 ++
standard-examples/src/main/webapp/xml/If.jsp | 42 ++++
standard-examples/src/main/webapp/xml/Out.jsp | 82 +++++++
standard-examples/src/main/webapp/xml/Parse.jsp | 30 +++
.../src/main/webapp/xml/ParseWithEntities.jsp | 27 +++
standard-examples/src/main/webapp/xml/Set.jsp | 31 +++
.../src/main/webapp/xml/Transform.jsp | 58 +++++
.../src/main/webapp/xml/TransformWithInclusion.jsp | 32 +++
standard-examples/src/main/webapp/xml/When.jsp | 68 ++++++
standard-examples/src/main/webapp/xml/games.xml | 31 +++
standard-examples/src/main/webapp/xml/included.xml | 3 +
.../src/main/webapp/xml/includedStylesheet.xsl | 10 +
standard-examples/src/main/webapp/xml/index.html | 93 ++++++++
120 files changed, 6774 insertions(+)
diff --git a/pom.xml b/pom.xml
index 88e8cd1..9a0d614 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,7 @@
<module>impl</module>
<module>compat</module>
<module>jstlel</module>
+ <module>standard-examples</module>
<!--
<module>standard-test</module>
-->
diff --git a/standard-examples/pom.xml b/standard-examples/pom.xml
new file mode 100644
index 0000000..908db86
--- /dev/null
+++ b/standard-examples/pom.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.taglibs</groupId>
+ <artifactId>taglibs-standard</artifactId>
+ <version>1.2.6-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>taglibs-standard-examples</artifactId>
+ <packaging>war</packaging>
+
+ <name>Apache Standard Taglib Example WAR</name>
+
+ <inceptionYear>2001</inceptionYear>
+ <description>
+ An example WAR for the JSP Standard Tag Library (JSTL).
+ </description>
+
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/tomcat/taglibs/standard/tags/taglibs-standard-1.2.0-RC1/examples</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/tomcat/taglibs/standard/tags/taglibs-standard-1.2.0-RC1/examples
+ </developerConnection>
+ <url>http://svn.apache.org/viewvc/tomcat/taglibs/standard/tags/taglibs-standard-1.2.0-RC1/examples</url>
+ </scm>
+
+ <developers>
+ <developer><name>Pierre Delisle</name></developer>
+ <developer><name>Shawn Bayern</name></developer>
+ <developer><name>Nathan Abramson</name></developer>
+ <developer><name>Hans Bergsten</name></developer>
+ <developer><name>Scott Hasse</name></developer>
+ <developer><name>Justyna Horwat</name></developer>
+ <developer><name>Mark Kolb</name></developer>
+ <developer><name>Jan Luehe</name></developer>
+ <developer><name>Glenn Nielsen</name></developer>
+ <developer><name>Dmitri Plotnikov</name></developer>
+ <developer><name>Felipe Leme</name></developer>
+ <developer><name>Henri Yandell</name></developer>
+ <developer><name>Bjorn Townsend</name></developer>
+ </developers>
+
+ <contributors>
+ <contributor><name>Robert Goff</name></contributor>
+ </contributors>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.taglibs</groupId>
+ <artifactId>taglibs-standard-spec</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.taglibs</groupId>
+ <artifactId>taglibs-standard-impl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet.jsp</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.el</groupId>
+ <artifactId>el-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.4.2.0</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!-- we do not deploy examples -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project>
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Address.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Address.java
new file mode 100644
index 0000000..cb3b455
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Address.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.beans;
+
+/**
+ * Object that represents a Customer.
+ *
+ * @author Pierre Delisle
+ */
+
+public class Address {
+
+ //*********************************************************************
+ // Instance variables
+
+ /**
+ * Holds value of property line1.
+ */
+ private String line1;
+
+ /**
+ * Holds value of property line2.
+ */
+ private String line2;
+
+ /**
+ * Holds value of property city.
+ */
+ private String city;
+
+ /**
+ * Holds value of property zip.
+ */
+ private String zip;
+
+ /**
+ * Holds value of property state.
+ */
+ private String state;
+
+ /**
+ * Holds value of property country.
+ */
+ private String country;
+
+ //*********************************************************************
+ // Constructor
+
+ public Address(String line1, String line2, String city,
+ String state, String zip, String country) {
+ setLine1(line1);
+ setLine2(line2);
+ setCity(city);
+ setState(state);
+ setZip(zip);
+ setCountry(country);
+ }
+
+ //*********************************************************************
+ // Accessors
+
+ /**
+ * Getter for property line1.
+ *
+ * @return Value of property line1.
+ */
+ public String getLine1() {
+ return line1;
+ }
+
+ /**
+ * Setter for property line1.
+ *
+ * @param line1 New value of property line1.
+ */
+ public void setLine1(String line1) {
+ this.line1 = line1;
+ }
+
+ /**
+ * Getter for property line2.
+ *
+ * @return Value of property line2.
+ */
+ public String getLine2() {
+ return line2;
+ }
+
+ /**
+ * Setter for property line2.
+ *
+ * @param line2 New value of property line2.
+ */
+ public void setLine2(String line2) {
+ this.line2 = line2;
+ }
+
+ /**
+ * Getter for property city.
+ *
+ * @return Value of property city.
+ */
+ public String getCity() {
+ return city;
+ }
+
+ /**
+ * Setter for property city.
+ *
+ * @param city New value of property city.
+ */
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ /**
+ * Getter for property zip.
+ *
+ * @return Value of property zip.
+ */
+ public String getZip() {
+ return zip;
+ }
+
+ /**
+ * Setter for property zip.
+ *
+ * @param zip New value of property zip.
+ */
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+
+ /**
+ * Getter for property country.
+ *
+ * @return Value of property country.
+ */
+ public String getCountry() {
+ return country;
+ }
+
+ /**
+ * Setter for property country.
+ *
+ * @param country New value of property country.
+ */
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ /**
+ * Getter for property state.
+ *
+ * @return Value of property state.
+ */
+ public String getState() {
+ return state;
+ }
+
+ /**
+ * Setter for property state.
+ *
+ * @param state New value of property state.
+ */
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ //*********************************************************************
+ // Utility Methods
+
+ /**
+ * Return a String representation of this object.
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(line1).append(" ");
+ sb.append(city).append(" ");
+ sb.append(country);
+ return (sb.toString());
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customer.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customer.java
new file mode 100644
index 0000000..5f7fe6c
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customer.java
@@ -0,0 +1,255 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.beans;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Object that represents a Customer.
+ *
+ * @author Pierre Delisle
+ */
+
+public class Customer {
+
+ //*********************************************************************
+ // Instance variables
+
+ /**
+ * Holds value of property key.
+ */
+ int key;
+
+ /**
+ * Holds value of property lastName.
+ */
+ private String lastName;
+
+ /**
+ * Holds value of property firstName.
+ */
+ private String firstName;
+
+ /**
+ * Holds value of property birthDate.
+ */
+ private Date birthDate;
+
+ /**
+ * Holds value of property address.
+ */
+ private Address address;
+
+ /**
+ * Holds value of property phoneHome.
+ */
+ private String phoneHome;
+
+ /**
+ * Holds value of property phoneCell.
+ */
+ private String phoneCell;
+
+ static DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
+
+ //*********************************************************************
+ // Constructors
+
+ public Customer() {
+ }
+
+ public Customer(int key,
+ String lastName,
+ String firstName,
+ Date birthDate,
+ Address address,
+ String phoneHome,
+ String phoneCell) {
+ init(key, lastName, firstName, birthDate, address, phoneHome, phoneCell);
+ }
+
+ public void init(int key,
+ String lastName,
+ String firstName,
+ Date birthDate,
+ Address address,
+ String phoneHome,
+ String phoneCell) {
+ setKey(key);
+ setLastName(lastName);
+ setFirstName(firstName);
+ setBirthDate(birthDate);
+ setAddress(address);
+ setPhoneHome(phoneHome);
+ setPhoneCell(phoneCell);
+ }
+
+ //*********************************************************************
+ // Properties
+
+ /**
+ * Getter for property key.
+ *
+ * @return Value of property key.
+ */
+ public int getKey() {
+ return key;
+ }
+
+ /**
+ * Setter for property key.
+ *
+ * @param key New value of property key.
+ */
+ public void setKey(int key) {
+ this.key = key;
+ }
+
+ /**
+ * Getter for property lastName.
+ *
+ * @return Value of property lastName.
+ */
+ public String getLastName() {
+ return lastName;
+ }
+
+ /**
+ * Setter for property lastName.
+ *
+ * @param lastName New value of property lastName.
+ */
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ /**
+ * Getter for property firstName.
+ *
+ * @return Value of property firstName.
+ */
+ public String getFirstName() {
+ return firstName;
+ }
+
+ /**
+ * Setter for property firstName.
+ *
+ * @param firstName New value of property firstName.
+ */
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ /**
+ * Getter for property birthDate.
+ *
+ * @return Value of property birthDate.
+ */
+ public Date getBirthDate() {
+ return birthDate;
+ }
+
+ /**
+ * Setter for property birthDate.
+ *
+ * @param birthDate New value of property birthDate.
+ */
+ public void setBirthDate(Date birthDate) {
+ this.birthDate = birthDate;
+ }
+
+ /**
+ * Getter for property address.
+ *
+ * @return Value of property address.
+ */
+ public Address getAddress() {
+ return address;
+ }
+
+ /**
+ * Setter for property address.
+ *
+ * @param address New value of property address.
+ */
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+
+ /**
+ * Getter for property phoneHome.
+ *
+ * @return Value of property phoneHome.
+ */
+ public String getPhoneHome() {
+ return phoneHome;
+ }
+
+ /**
+ * Setter for property phoneHome.
+ *
+ * @param phoneHome New value of property phoneHome.
+ */
+ public void setPhoneHome(String phoneHome) {
+ this.phoneHome = phoneHome;
+ }
+
+ /**
+ * Getter for property phoneCell.
+ *
+ * @return Value of property phoneCell.
+ */
+ public String getPhoneCell() {
+ return phoneCell;
+ }
+
+ /**
+ * Setter for property phoneCell.
+ *
+ * @param phoneCell New value of property phoneCell.
+ */
+ public void setPhoneCell(String phoneCell) {
+ this.phoneCell = phoneCell;
+ }
+
+ //*********************************************************************
+ // Utility Methods
+
+ /**
+ * Return a String representation of this object.
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("[").append(key).append("] ");
+ sb.append(getLastName()).append(", ");
+ sb.append(getFirstName()).append(" ");
+ sb.append(df.format(getBirthDate())).append(" ");
+ sb.append(getAddress()).append(" ");
+ if (getPhoneHome() != null) {
+ sb.append(getPhoneHome()).append(" ");
+ }
+ if (getPhoneCell() != null) {
+ sb.append(getPhoneCell());
+ }
+ return (sb.toString());
+ }
+}
+
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customers.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customers.java
new file mode 100644
index 0000000..5afd260
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/beans/Customers.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.beans;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Vector;
+
+/**
+ * Customers Datastore.
+ *
+ * @author Pierre Delisle
+ */
+
+public class Customers {
+
+ //*********************************************************************
+ // Instance variables
+
+ private static Vector customers = new Vector();
+ private static int nextSeqNo = 0;
+
+ //*********************************************************************
+ // Datastore operations
+
+ public static void create(
+ String lastName,
+ String firstName,
+ String birthDate,
+ String line1,
+ String line2,
+ String city,
+ String state,
+ String zip,
+ String country) {
+ create(lastName, firstName, birthDate, line1, line2, city, state, zip,
+ country, null, null);
+ }
+
+ /**
+ * Create new customer
+ */
+ public static void create(
+ String lastName,
+ String firstName,
+ String birthDate,
+ String line1,
+ String line2,
+ String city,
+ String state,
+ String zip,
+ String country,
+ String phoneHome,
+ String phoneCell) {
+ Customer customer =
+ new Customer(++nextSeqNo, lastName, firstName,
+ genDate(birthDate), genAddress(line1, line2, city, state, zip, country),
+ phoneHome, phoneCell);
+ customers.add(customer);
+ }
+
+ /**
+ * Find all customers
+ */
+ public static Collection findAll() {
+ return customers;
+ }
+
+ //*********************************************************************
+ // Utility methods
+
+ private static Date genDate(String dateString) {
+ DateFormat df = new SimpleDateFormat("M/d/y");
+ Date date;
+ try {
+ date = df.parse(dateString);
+ } catch (Exception ex) {
+ date = null;
+ }
+ return date;
+ }
+
+ private static Address genAddress(String line1, String line2, String city,
+ String state, String zip, String country) {
+ return new Address(line1, line2, city, state, zip, country);
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources.java
new file mode 100644
index 0000000..8ae4298
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.i18n;
+
+import java.util.ListResourceBundle;
+
+public class Resources extends ListResourceBundle {
+ private static Object[][] contents;
+
+ static {
+ contents = new Object[][]{
+ {"greetingMorning", "Good Morning!"},
+ {"greetingEvening", "Good Evening!"},
+ {"serverInfo", "Name/Version of Servlet Container: {0}, "
+ + "Java Version: {1}"},
+ {"currentTime", "Current time: {0}"},
+ {"com.acme.labels.cancel", "Cancel"},
+ {"java.lang.ArithmeticException", "division by 0"}
+ };
+ }
+
+ public Object[][] getContents() {
+ return contents;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_de.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_de.java
new file mode 100644
index 0000000..0a62ee1
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_de.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.i18n;
+
+import java.util.ListResourceBundle;
+
+public class Resources_de extends ListResourceBundle {
+ private static Object[][] contents;
+
+ static {
+ contents = new Object[][]{
+ {"greetingMorning", "Guten Morgen!"},
+ {"greetingEvening", "Guten Abend!"},
+ {"serverInfo", "Name/Version des Servlet Containers: {0}, "
+ + "Java Version: {1}"},
+ {"currentTime", "Heutiges Datum und Uhrzeit: {0}"},
+ {"com.acme.labels.cancel", "Abbrechen"},
+ {"java.lang.ArithmeticException", "/ durch 0"}
+ };
+ }
+
+ public Object[][] getContents() {
+ return contents;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_fr.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_fr.java
new file mode 100644
index 0000000..3825bbb
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_fr.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.i18n;
+
+import java.util.ListResourceBundle;
+
+public class Resources_fr extends ListResourceBundle {
+ private static Object[][] contents;
+
+ static {
+ contents = new Object[][]{
+ {"greetingMorning", "Bonjour!!"},
+ {"greetingEvening", "Bonsoir!"},
+ {"serverInfo", "Nom/Version du Servlet Container: {0}, "
+ + "Version Java: {1}"},
+ {"currentTime", "Nous sommes le: {0}"},
+ {"com.acme.labels.cancel", "Annuler"},
+ {"java.lang.ArithmeticException", "division par 0"}
+ };
+ }
+
+ public Object[][] getContents() {
+ return contents;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_it.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_it.java
new file mode 100644
index 0000000..be819b1
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/i18n/Resources_it.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.i18n;
+
+import java.util.ListResourceBundle;
+
+public class Resources_it extends ListResourceBundle {
+ private static Object[][] contents;
+
+ static {
+ contents = new Object[][]{
+ {"greetingMorning", "Buon giorno!"}
+ };
+ }
+
+ public Object[][] getContents() {
+ return contents;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/startup/Init.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/startup/Init.java
new file mode 100644
index 0000000..6919fc8
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/startup/Init.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.startup;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.taglibs.standard.examples.beans.Customers;
+
+/**
+ * Initialization class. Builds all the data structures
+ * used in the "examples" webapp.
+ *
+ * @author Pierre Delisle
+ */
+public class Init implements ServletContextListener {
+
+ //*********************************************************************
+ // ServletContextListener methods
+
+ // recovers the one context parameter we need
+
+ public void contextInitialized(ServletContextEvent sce) {
+ //p("contextInitialized");
+ init(sce);
+ }
+
+ public void contextDestroyed(ServletContextEvent sce) {
+ //p("contextInitialized");
+ }
+
+ //*********************************************************************
+ // Initializations
+
+ private void init(ServletContextEvent sce) {
+ /*
+ * Customers
+ */
+ Customers.create("Richard", "Maurice", "5/15/35",
+ "123 Chemin Royal", "Appt. #301",
+ "Montreal", "QC", "H3J 9R9", "Canada");
+ Customers.create("Mikita", "Stan", "12/25/47",
+ "45 Fisher Blvd", "Suite 203",
+ "Chicago", "IL", "65982", "USA", "(320)876-9784", null);
+ Customers.create("Gilbert", "Rod", "3/11/51",
+ "123 Main Street", "",
+ "New-York City", "NY", "19432", "USA");
+ Customers.create("Howe", "Gordie", "7/25/46",
+ "7654 Wings Street", "",
+ "Detroit", "MG", "07685", "USA", "(465)675-0761", "(465)879-9802");
+ Customers.create("Sawchuk", "Terrie", "11/05/46",
+ "12 Maple Leafs Avenue", "",
+ "Toronto", "ON", "M5C 1Z1", "Canada");
+ sce.getServletContext().setAttribute("customers", Customers.findAll());
+
+ /**
+ * Array of primitives (int)
+ */
+ int[] intArray = new int[]{10, 20, 30, 40, 50};
+ sce.getServletContext().setAttribute("intArray", intArray);
+
+ /**
+ * Array of Objects (String)
+ */
+ String[] stringArray = new String[]{
+ "A first string",
+ "La deuxieme string",
+ "Ella troisiemo stringo",
+ };
+ sce.getServletContext().setAttribute("stringArray", stringArray);
+
+ /**
+ * String-keyed Map
+ */
+ Hashtable stringMap = new Hashtable();
+ sce.getServletContext().setAttribute("stringMap", stringMap);
+ stringMap.put("one", "uno");
+ stringMap.put("two", "dos");
+ stringMap.put("three", "tres");
+ stringMap.put("four", "cuatro");
+ stringMap.put("five", "cinco");
+ stringMap.put("six", "seis");
+ stringMap.put("seven", "siete");
+ stringMap.put("eight", "ocho");
+ stringMap.put("nine", "nueve");
+ stringMap.put("ten", "diez");
+
+ /**
+ * Integer-keyed Map
+ */
+ // we use a Hashtable so we can get an Enumeration easily, below
+ Hashtable numberMap = new Hashtable();
+ sce.getServletContext().setAttribute("numberMap", numberMap);
+ numberMap.put(new Integer(1), "uno");
+ numberMap.put(new Integer(2), "dos");
+ numberMap.put(new Integer(3), "tres");
+ numberMap.put(new Integer(4), "cuatro");
+ numberMap.put(new Integer(5), "cinco");
+ numberMap.put(new Integer(6), "seis");
+ numberMap.put(new Integer(7), "siete");
+ numberMap.put(new Integer(8), "ocho");
+ numberMap.put(new Integer(9), "nueve");
+ numberMap.put(new Integer(10), "diez");
+
+ /**
+ * Enumeration
+ */
+ Enumeration enum_ = numberMap.keys();
+ // don't use 'enum' for attribute name because it is a
+ // reserved word in EcmaScript.
+ sce.getServletContext().setAttribute("enumeration", enum_);
+
+ /**
+ * Message arguments for parametric replacement
+ */
+ Object[] serverInfoArgs =
+ new Object[]{
+ sce.getServletContext().getServerInfo(),
+ System.getProperty("java.version")
+ };
+ sce.getServletContext().setAttribute("serverInfoArgs", serverInfoArgs);
+ }
+
+ //*********************************************************************
+ // Initializations
+
+ private void p(String s) {
+ System.out.println("[Init] " + s);
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/CustomerFmtTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/CustomerFmtTag.java
new file mode 100644
index 0000000..277a7eb
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/CustomerFmtTag.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.io.IOException;
+
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.apache.taglibs.standard.examples.beans.Customer;
+
+/**
+ * <p>Tag handler for <customerFmt>
+ *
+ * @author Pierre Delisle
+ */
+public class CustomerFmtTag extends TagSupport {
+
+ //*********************************************************************
+ // Instance variables
+
+ /**
+ * Holds value of property customer.
+ */
+ private Customer customer;
+
+ /**
+ * Holds value of property fmt.
+ */
+ private String fmt;
+
+ //*********************************************************************
+ // Constructors
+
+ public CustomerFmtTag() {
+ super();
+ init();
+ }
+
+ private void init() {
+ customer = null;
+ fmt = null;
+ }
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doStartTag() throws JspException {
+ JspWriter out = pageContext.getOut();
+ try {
+ if (fmt.equalsIgnoreCase("short")) {
+ out.println(customer.getFirstName() + " " +
+ customer.getLastName());
+ } else if (fmt.equalsIgnoreCase("long")) {
+ out.println(customer.getFirstName() + " " +
+ customer.getLastName() + " " + customer.getAddress());
+ } else {
+ out.println("invalid format");
+ }
+ } catch (IOException ex) {
+ }
+
+ return SKIP_BODY;
+ }
+
+ // Releases any resources we may have (or inherit)
+
+ public void release() {
+ super.release();
+ init();
+ }
+
+ //*********************************************************************
+ // Accessors
+
+ /**
+ * Getter for property customer.
+ *
+ * @return Value of property customer.
+ */
+ public Customer getCustomer() {
+ return customer;
+ }
+
+ /**
+ * Setter for property customer.
+ *
+ * @param customer New value of property customer.
+ */
+ public void setCustomer(Customer customer) {
+ this.customer = customer;
+ }
+
+ /**
+ * Getter for property fmt.
+ *
+ * @return Value of property fmt.
+ */
+ public String getFmt() {
+ return fmt;
+ }
+
+ /**
+ * Setter for property fmt.
+ *
+ * @param fmt New value of property fmt.
+ */
+ public void setFmt(String fmt) {
+ this.fmt = fmt;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/DefaultLocaleTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/DefaultLocaleTag.java
new file mode 100644
index 0000000..f3d430a
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/DefaultLocaleTag.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.util.Locale;
+
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.jstl.core.ConditionalTagSupport;
+
+/**
+ * <p>Tag handler for <locales>
+ *
+ * @author Felipe Leme <js...@felipeal.net>
+ */
+
+public class DefaultLocaleTag extends ConditionalTagSupport {
+
+ private static final Locale defaultLocale = Locale.getDefault();
+
+ public boolean condition() throws JspTagException {
+ LocalesTag localesTag = (LocalesTag) findAncestorWithClass(this, LocalesTag.class);
+ if (localesTag == null) {
+ throw new JspTagException("defaultLocale bust be inside locales");
+ }
+ return localesTag.getCurrent().equals(defaultLocale);
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EscapeHtmlTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EscapeHtmlTag.java
new file mode 100644
index 0000000..a075e78
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EscapeHtmlTag.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+
+import org.apache.taglibs.standard.examples.util.Util;
+
+/**
+ * <p>Tag handler for <escapeHtml>
+ *
+ * @author Pierre Delisle
+ */
+public class EscapeHtmlTag extends BodyTagSupport {
+
+ //*********************************************************************
+ // Instance variables
+
+ private Object reader;
+ private Object writer;
+
+ //*********************************************************************
+ // Constructors
+
+ public EscapeHtmlTag() {
+ super();
+ init();
+ }
+
+ private void init() {
+ reader = null;
+ writer = null;
+ }
+
+
+ //*********************************************************************
+ // Tag's properties
+
+ /**
+ * Tag's 'reader' attribute
+ */
+ public void setReader(Object reader) {
+ this.reader = reader;
+ }
+
+ /**
+ * Tag's 'writer' attribute
+ */
+ public void setWriter(Object writer) {
+ this.writer = writer;
+ }
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doEndTag() throws JspException {
+ Reader in;
+ Writer out;
+
+ if (reader == null) {
+ String bcs = getBodyContent().getString().trim();
+ if (bcs == null || bcs.equals("")) {
+ throw new JspTagException("In <escapeHtml>, 'reader' " +
+ "not specified and no non-whitespace content inside the tag.");
+ }
+ in = Util.castToReader(bcs);
+ } else {
+ in = Util.castToReader(reader);
+ }
+
+ if (writer == null) {
+ out = pageContext.getOut();
+ } else {
+ out = Util.castToWriter(writer);
+ }
+
+ transform(in, out);
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Releases any resources we may have (or inherit)
+ */
+ public void release() {
+ super.release();
+ init();
+ }
+
+ //*********************************************************************
+ // Tag's scific behavior methods
+
+ /**
+ * Transform
+ */
+ public void transform(Reader reader, Writer writer)
+ throws JspException {
+ int c;
+ try {
+ writer.write("<pre>");
+ while ((c = reader.read()) != -1) {
+ if (c == '<') {
+ writer.write("<");
+ } else if (c == '>') {
+ writer.write(">");
+ } else {
+ writer.write(c);
+ }
+ }
+ writer.write("</pre>");
+ } catch (IOException ex) {
+ throw new JspException("EscapeHtml: " +
+ "error copying chars", ex);
+ }
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EvenTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EvenTag.java
new file mode 100644
index 0000000..80c4bd3
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/EvenTag.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.jstl.core.LoopTag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * <p>Tag handler for <odd>
+ *
+ * @author Pierre Delisle
+ */
+public class EvenTag extends TagSupport {
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doStartTag() throws JspException {
+ LoopTag iteratorTag = (LoopTag) findAncestorWithClass(
+ this, LoopTag.class);
+ if (iteratorTag == null) {
+ throw new JspTagException("<even> must be nested within a LoopTag");
+ }
+
+ int count = iteratorTag.getLoopStatus().getCount();
+ return (count % 2 == 0) ? EVAL_BODY_INCLUDE : SKIP_BODY;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/FileTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/FileTag.java
new file mode 100644
index 0000000..78c8b7c
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/FileTag.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * <p>Tag handler for <file>
+ *
+ * @author Pierre Delisle
+ */
+public class FileTag extends TagSupport {
+
+ //*********************************************************************
+ // Instance variables
+
+ private String id;
+ private String file;
+
+ private Reader reader;
+
+ //*********************************************************************
+ // Constructors
+
+ public FileTag() {
+ super();
+ init();
+ }
+
+ private void init() {
+ id = null;
+ file = null;
+ }
+
+ //*********************************************************************
+ // Tag's properties
+
+ /**
+ * Tag's 'id' attribute
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * Tag's 'file' attribute
+ */
+ public void setfile(String file) {
+ this.file = file;
+ }
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doStartTag() throws JspException {
+ reader = getReaderFromFile(file);
+ exposeVariable(reader);
+ return EVAL_BODY_INCLUDE;
+ }
+
+ public int doEndTag() throws JspException {
+ try {
+ reader.close();
+ } catch (IOException ex) {
+ }
+ reader = null;
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Releases any files we may have (or inherit)
+ */
+ public void release() {
+ super.release();
+ init();
+ }
+
+ //*********************************************************************
+ // Tag's specific behavior methods
+
+ public Reader getReaderFromFile(String name) throws JspException {
+ InputStream in = pageContext.getServletContext().
+ getResourceAsStream(name);
+ if (in == null) {
+ throw new JspException("Could not access " + name);
+ }
+
+ return new InputStreamReader(in);
+ }
+
+
+ //*********************************************************************
+ // Utility methods
+
+ private void exposeVariable(Reader reader) {
+ if (id != null) {
+ pageContext.setAttribute(id, reader);
+ }
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/Functions.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/Functions.java
new file mode 100644
index 0000000..a2a6627
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/Functions.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.lang.reflect.Array;
+
+import javax.servlet.jsp.JspTagException;
+
+/**
+ * <p>Exmaples taglib Functions</p>
+ *
+ * @author Pierre Delisle
+ */
+
+public class Functions {
+
+ /**
+ * Display the collection types supported by c:forEach.
+ */
+ public static String display(Object obj) throws JspTagException {
+ if (obj == null) {
+ return "";
+ }
+ if (obj instanceof String) {
+ return obj.toString();
+ }
+ /*
+ if (obj instanceof Collection) {
+ return "FIXME";
+ }
+ if (obj instanceof Map) {
+ return "FIXME";
+ }
+ if (obj instanceof Iterator) {
+ Iterator iter = (Iterator)obj;
+ while (iter.hasNext()) {
+ iter.next();
+ }
+ return "FIXME";
+ }
+ if (obj instanceof Enumeration) {
+ Enumeration enum_ = (Enumeration)obj;
+ while (enum_.hasMoreElements()) {
+ enum_.nextElement();
+ }
+ return "FIXME";
+ }
+ */
+ try {
+ StringBuffer buf = new StringBuffer();
+ int count = Array.getLength(obj);
+ for (int i = 0; i < count; i++) {
+ buf.append(Array.get(obj, i).toString());
+ if (i < count - 1) {
+ buf.append("<font color='red'> • </font>");
+ }
+ }
+ return buf.toString();
+ } catch (IllegalArgumentException ex) {
+ }
+ throw new JspTagException("Bad Item");
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/LocalesTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/LocalesTag.java
new file mode 100644
index 0000000..b4f3777
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/LocalesTag.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.util.Locale;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.jstl.core.LoopTagSupport;
+
+/**
+ * <p>Tag handler for <locales>
+ *
+ * @author Felipe Leme <js...@felipeal.net>
+ */
+public class LocalesTag extends LoopTagSupport {
+
+ private static final Locale[] locales = Locale.getAvailableLocales();
+ private int pointer;
+ private String varTotal;
+
+ public void setVarTotal(String value) {
+ varTotal = value;
+ }
+
+ public void prepare() {
+ pointer = 0;
+ if (varTotal != null && varTotal.length() > 0) {
+ pageContext.setAttribute(varTotal, new Integer(locales.length));
+ }
+
+ }
+
+ public boolean hasNext() {
+ return pointer < locales.length;
+ }
+
+ public Object next() {
+ return locales[pointer++];
+ }
+
+ public void setBegin(int value) {
+ super.begin = value;
+ }
+
+ public void setEnd(int value) {
+ super.end = value;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/NullAttributeException.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/NullAttributeException.java
new file mode 100644
index 0000000..747ee56
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/NullAttributeException.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import javax.servlet.jsp.JspTagException;
+
+/**
+ * <p>NullAttributeException is a JspTagException that will be thrown
+ * by the JSTL RI handlers when a tag attribute illegally evaluates
+ * to 'null'.</p>
+ *
+ * @author Shawn Bayern
+ */
+
+public class NullAttributeException extends JspTagException {
+
+ /**
+ * Constructs a ExpressionException with appropriate information.
+ *
+ * @param tag The name of the tag in which the error occurred.
+ * @param att The attribute value for which the error occurred.
+ */
+ public NullAttributeException(String tag, String att) {
+ super("The '" + att + "' attribute illegally evaluated to 'null' "
+ + "in <" + tag + ">.");
+ }
+}
+
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/OddTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/OddTag.java
new file mode 100644
index 0000000..c7140a9
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/OddTag.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.jstl.core.LoopTag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * <p>Tag handler for <odd>
+ *
+ * @author Pierre Delisle
+ */
+public class OddTag extends TagSupport {
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doStartTag() throws JspException {
+ LoopTag iteratorTag = (LoopTag) findAncestorWithClass(
+ this, LoopTag.class);
+ if (iteratorTag == null) {
+ throw new JspTagException("<odd> must be nested within a LoopTag");
+ }
+
+ int count = iteratorTag.getLoopStatus().getCount();
+// System.out.println("count: " + count);
+// System.out.println("count odd/even: " + (count % 2));
+ return (count % 2 == 1) ? EVAL_BODY_INCLUDE : SKIP_BODY;
+ }
+}
+
+
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/ResourceTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/ResourceTag.java
new file mode 100644
index 0000000..cf73694
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/ResourceTag.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletResponseWrapper;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.apache.taglibs.standard.examples.util.IOBean;
+import org.apache.taglibs.standard.examples.util.ServletResponseWrapperForWriter;
+
+/**
+ * <p>Tag handler for <resource>
+ *
+ * @author Pierre Delisle
+ */
+public class ResourceTag extends TagSupport {
+
+ //*********************************************************************
+ // Instance variables
+
+ private String id;
+ private String resource;
+
+ private Reader reader;
+
+ //*********************************************************************
+ // Constructors
+
+ public ResourceTag() {
+ super();
+ init();
+ }
+
+ private void init() {
+ id = null;
+ resource = null;
+ }
+
+ //*********************************************************************
+ // Tag's properties
+
+ /**
+ * Tag's 'id' attribute
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * Tag's 'resource' attribute
+ */
+ public void setResource(String resource) {
+ this.resource = resource;
+ }
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public int doStartTag() throws JspException {
+ reader = getReaderFromResource(resource);
+ exposeVariable(reader);
+ return EVAL_BODY_INCLUDE;
+ }
+
+ public int doEndTag() throws JspException {
+ try {
+ reader.close();
+ } catch (IOException ex) {
+ }
+ reader = null;
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Releases any resources we may have (or inherit)
+ */
+ public void release() {
+ super.release();
+ init();
+ }
+
+ //*********************************************************************
+ // Tag's scific behavior methods
+
+ private Reader getReaderFromResource(String name) throws JspException {
+ HttpServletRequest request =
+ (HttpServletRequest) pageContext.getRequest();
+ HttpServletResponse response =
+ (HttpServletResponse) pageContext.getResponse();
+ RequestDispatcher rd = null;
+
+ // The response of the local URL becomes the reader that
+ // we export. Need temporary storage.
+ IOBean ioBean = new IOBean();
+ Writer writer = ioBean.getWriter();
+ ServletResponseWrapper responseWrapper =
+ new ServletResponseWrapperForWriter(
+ response, new PrintWriter(writer));
+ rd = pageContext.getServletContext().getRequestDispatcher(name);
+ try {
+ rd.include(request, responseWrapper);
+ return ioBean.getReader();
+ } catch (Exception ex) {
+ throw new JspException(ex);
+ }
+ }
+
+ //*********************************************************************
+ // Utility methods
+
+ private void exposeVariable(Reader reader) {
+ if (id != null) {
+ pageContext.setAttribute(id, reader);
+ }
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/UsCustomerTag.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/UsCustomerTag.java
new file mode 100644
index 0000000..f55da79
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/taglib/UsCustomerTag.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.taglib;
+
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspTagException;
+import javax.servlet.jsp.jstl.core.ConditionalTagSupport;
+
+import org.apache.taglibs.standard.examples.beans.Customer;
+
+/**
+ * <p>Tag handler for <usCustomer>
+ *
+ * @author Pierre Delisle
+ */
+public class UsCustomerTag extends ConditionalTagSupport {
+
+ //*********************************************************************
+ // Instance Variables
+
+ /**
+ * Holds value of property customer.
+ */
+ private Customer customer;
+
+ //*********************************************************************
+ // Constructor and lusCustomerecycle management
+
+ public UsCustomerTag() {
+ super();
+ init();
+ }
+
+ private void init() {
+ customer = null;
+ }
+
+ //*********************************************************************
+ // TagSupport methods
+
+ public void release() {
+ super.release();
+ init();
+ }
+
+ //*********************************************************************
+ // ConditionalTagSupport methods
+
+ protected boolean condition() throws JspTagException {
+ try {
+ if (customer == null) {
+ throw new NullAttributeException("usCustomer", "test");
+ } else {
+ //System.out.println("country: " + customer.getAddress().getCountry());
+ return (customer.getAddress().getCountry().equalsIgnoreCase("USA"));
+ }
+ } catch (JspException ex) {
+ throw new JspTagException(ex.toString());
+ }
+ }
+
+ //*********************************************************************
+ // Accessors
+
+ /**
+ * Getter for property customer.
+ *
+ * @return Value of property customer.
+ */
+ public Customer getCustomer() {
+ return customer;
+ }
+
+ /**
+ * Setter for property customer.
+ *
+ * @param customer New value of property customer.
+ */
+ public void setCustomer(Customer customer) {
+ this.customer = customer;
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/IOBean.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/IOBean.java
new file mode 100644
index 0000000..f4958d8
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/IOBean.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.util;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * <p>String repository for Reader/Writer.
+ *
+ * @author Pierre Delisle
+ */
+public class IOBean {
+ StringWriter stringWriter = null;
+ String content = null;
+
+ public Reader getReader() throws JspException {
+ //p("getReader()");
+ if (content == null) {
+ if (stringWriter == null) {
+ throw new JspException(
+ "content must first be added to the bean via the writer");
+ }
+ content = stringWriter.toString();
+ }
+ return new StringReader(content);
+ }
+
+ public Writer getWriter() {
+ //p("getWriter()");
+ content = null;
+ stringWriter = new StringWriter();
+ return stringWriter;
+ }
+
+ public void release() {
+ stringWriter = null;
+ content = null;
+ }
+
+ private void p(String s) {
+ System.out.println("[IOBean] " + s);
+ }
+}
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/ServletResponseWrapperForWriter.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/ServletResponseWrapperForWriter.java
new file mode 100644
index 0000000..b37d3b1
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/ServletResponseWrapperForWriter.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.util;
+
+import java.io.PrintWriter;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * ServletResponseWrapper used for the the generation of
+ * semi-dynamic pages.
+ * <p>This 'wrapped' response object is passed as the second argument
+ * to the internal RequestDispatcher.include(). It channels
+ * all output text into the PrintWriter specified in the
+ * constructor (which is associated with the file where the
+ * output of the JSP page has to be saved).
+ *
+ * @author Pierre Delisle
+ */
+public class ServletResponseWrapperForWriter
+ extends HttpServletResponseWrapper {
+ /**
+ * The writer that will get all the output of the response.
+ */
+ PrintWriter writer;
+
+ public ServletResponseWrapperForWriter(ServletResponse response,
+ PrintWriter writer) {
+ super((HttpServletResponse) response);
+ this.writer = writer;
+ }
+
+ /**
+ * Returns the Writer associated with the response.
+ */
+ public java.io.PrintWriter getWriter()
+ throws java.io.IOException {
+ return writer;
+ }
+}
+
diff --git a/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/Util.java b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/Util.java
new file mode 100644
index 0000000..08e69bd
--- /dev/null
+++ b/standard-examples/src/main/java/org/apache/taglibs/standard/examples/util/Util.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.taglibs.standard.examples.util;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.Writer;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * <p>Utility class for examples webapp.
+ *
+ * @author Pierre Delisle
+ */
+public class Util {
+
+ public static Writer castToWriter(Object obj) throws JspException {
+ if (obj instanceof OutputStream) {
+ return new OutputStreamWriter((OutputStream) obj);
+ } else if (obj instanceof Writer) {
+ return (Writer) obj;
+ /*@@@
+ } else if (obj instanceof String) {
+ return new StringWriter();
+ */
+ }
+ throw new JspException("Invalid type '" + obj.getClass().getName() +
+ "' for castToWriter()");
+ }
+
+ public static Reader castToReader(Object obj) throws JspException {
+ if (obj instanceof InputStream) {
+ return new InputStreamReader((InputStream) obj);
+ } else if (obj instanceof Reader) {
+ return (Reader) obj;
+ } else if (obj instanceof String) {
+ return new StringReader((String) obj);
+ }
+ throw new JspException("Invalid type '" + obj.getClass().getName() +
+ "' for castToReader()");
+ }
+}
+
diff --git a/standard-examples/src/main/webapp/ShowSource.jsp b/standard-examples/src/main/webapp/ShowSource.jsp
new file mode 100644
index 0000000..92fdfb7
--- /dev/null
+++ b/standard-examples/src/main/webapp/ShowSource.jsp
@@ -0,0 +1,36 @@
+<!--
+Displays the content of the file specified in request
+parameter "filename".
+<%-- Warning! Can be used to retrieve the source code for
+any file in the 'standard-examples' application.
+It is not advisable to insert any sensitive code
+(even as an experiment) into this application --%>
+-->
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<%--
+ Let's get back the URL as a String so we can use it to
+ demonstrate "c:import"
+--%>
+<% pageContext.setAttribute("filepath",
+ application.
+ getResource(request.getParameter("filename")).toExternalForm()); %>
+<% pageContext.setAttribute("filename", request.getParameter("filename")); %>
+
+<html>
+<head>
+ <title>JSTL: Source code for <c:out value="${filename}"/></title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Source code for: ${filename}</h3>
+
+<hr>
+
+<c:import varReader="reader" url="${filepath}">
+ <ex:escapeHtml reader="${reader}"/>
+</c:import>
+<hr>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/Templates/ExamplesTemplate.dwt b/standard-examples/src/main/webapp/Templates/ExamplesTemplate.dwt
new file mode 100644
index 0000000..200becc
--- /dev/null
+++ b/standard-examples/src/main/webapp/Templates/ExamplesTemplate.dwt
@@ -0,0 +1,38 @@
+<html>
+<head>
+<!-- #BeginEditable "doctitle" -->
+<title>Untitled Document</title>
+<!-- #EndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a> • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> • <a href="../import/index.jsp">Import</a>
+ • <a href="../format/index.html">I18N & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a> • <a href="../misc/index.html"></a><a href="../misc/index.html">Misc.</a></font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->{body}<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+</table>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/WEB-INF/tlds/jstl-examples.tld b/standard-examples/src/main/webapp/WEB-INF/tlds/jstl-examples.tld
new file mode 100644
index 0000000..91fdfa2
--- /dev/null
+++ b/standard-examples/src/main/webapp/WEB-INF/tlds/jstl-examples.tld
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+ <description>
+ Tag Library to support examples webapp
+ </description>
+ <tlib-version>1.1</tlib-version>
+ <short-name>ex</short-name>
+ <uri>/jstl-examples-taglib</uri>
+
+ <tag>
+ <name>defaultLocale</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.DefaultLocaleTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <name>locales</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.LocalesTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varTotal</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>escapeHtml</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.EscapeHtmlTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>reader</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>writer</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>resource</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.ResourceTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>resource</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>file</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.FileTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>file</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>odd</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.OddTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <name>even</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.EvenTag</tag-class>
+ <body-content>JSP</body-content>
+ </tag>
+
+ <tag>
+ <name>usCustomer</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.UsCustomerTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <name>customer</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>customerFmt</name>
+ <tag-class>org.apache.taglibs.standard.examples.taglib.CustomerFmtTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>customer</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>fmt</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>SPath</name>
+ <tag-class>org.apache.taglibs.standard.extra.spath.SPathTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>select</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <function>
+ <name>display</name>
+ <function-class>org.apache.taglibs.standard.examples.taglib.Functions</function-class>
+ <function-signature>java.lang.String display(java.lang.Object)</function-signature>
+ </function>
+
+</taglib>
diff --git a/standard-examples/src/main/webapp/WEB-INF/web.xml b/standard-examples/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..fa6429a
--- /dev/null
+++ b/standard-examples/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
+ version="2.4">
+
+ <display-name>JSTL Examples</display-name>
+ <description>
+ Examples for the 'standard' taglib (JSTL)
+ </description>
+
+ <listener>
+ <listener-class>org.apache.taglibs.standard.examples.startup.Init</listener-class>
+ </listener>
+
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ </welcome-file-list>
+
+</web-app>
diff --git a/standard-examples/src/main/webapp/conditionals/Choose.jsp b/standard-examples/src/main/webapp/conditionals/Choose.jsp
new file mode 100644
index 0000000..2985343
--- /dev/null
+++ b/standard-examples/src/main/webapp/conditionals/Choose.jsp
@@ -0,0 +1,27 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Conditional Support -- Mutually Exclusive Conditional Execution Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Mutually Exclusive Conditional Execution</h3>
+
+<h4>USA:blue Canada:red Others:green</h4>
+
+<c:forEach var="customer" items="${customers}">
+<c:choose>
+<c:when test="${customer.address.country == 'USA'}">
+<font color="blue">
+ </c:when>
+ <c:when test="${customer.address.country == 'Canada'}">
+ <font color="red">
+ </c:when>
+ <c:otherwise>
+ <font color="green">
+ </c:otherwise>
+ </c:choose>
+ ${customer}</font><br>
+ </c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/conditionals/CustomLogicTag.jsp b/standard-examples/src/main/webapp/conditionals/CustomLogicTag.jsp
new file mode 100644
index 0000000..96e9f51
--- /dev/null
+++ b/standard-examples/src/main/webapp/conditionals/CustomLogicTag.jsp
@@ -0,0 +1,36 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL: Conditional Support -- Custom Logic Tag Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>Custom Logic Tag</h3>
+
+<h4>Customers living in the USA</h4>
+
+<h4>Simple Conditional Execution</h4>
+<c:forEach var="customer" items="${customers}">
+ <ex:usCustomer customer="${customer}">
+ <c:out value="${customer}"/><br>
+ </ex:usCustomer>
+</c:forEach>
+
+<h4>Mutually Exclusive Conditional Execution</h4>
+
+<c:forEach var="customer" items="${customers}">
+<ex:usCustomer customer="${customer}" var="isUsCustomer"/>
+<c:choose>
+<c:when test="${isUsCustomer}">
+<font color="blue">
+ </c:when>
+ <c:otherwise>
+ <font color="green">
+ </c:otherwise>
+ </c:choose>
+ <c:out value="${customer}"/></font><br>
+ </c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/conditionals/FailureLocal.jsp b/standard-examples/src/main/webapp/conditionals/FailureLocal.jsp
new file mode 100644
index 0000000..60bd733
--- /dev/null
+++ b/standard-examples/src/main/webapp/conditionals/FailureLocal.jsp
@@ -0,0 +1,27 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Conditional Support -- Mutually Exclusive Conditional Execution Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Mutually Exclusive Conditional Execution</h3>
+
+<h4>USA:blue Canada:red Others:green</h4>
+
+<c:forEach var="customer" items="${customers}">
+<c:choose>
+<c:otherwise>
+<font color="green">
+ </c:otherwise>
+ <c:when test="${customer.address.country == 'USA'}">
+ <font color="blue">
+ </c:when>
+ <c:when test="${customer.address.country == 'Canada'}">
+ <font color="red">
+ </c:when>
+ </c:choose>
+ <c:out value="${customer}"/></font><br>
+ </c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/conditionals/If.jsp b/standard-examples/src/main/webapp/conditionals/If.jsp
new file mode 100644
index 0000000..f10b5d9
--- /dev/null
+++ b/standard-examples/src/main/webapp/conditionals/If.jsp
@@ -0,0 +1,19 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Conditional Support -- Simple Conditional Execution Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>Simple Conditional Execution</h3>
+
+<h4>Customers living in the USA</h4>
+
+<c:forEach var="customer" items="${customers}">
+ <c:if test="${customer.address.country == 'USA'}">
+ ${customer}<br>
+ </c:if>
+</c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/conditionals/index.html b/standard-examples/src/main/webapp/conditionals/index.html
new file mode 100644
index 0000000..156c8d9
--- /dev/null
+++ b/standard-examples/src/main/webapp/conditionals/index.html
@@ -0,0 +1,66 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Conditional Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Conditional Tags Examples</h2>
+
+<h3><if> Simple Conditional Execution <a href="../ShowSource.jsp?filename=/conditionals/If.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="If.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Only shows a customer from the customer list if they are living in the "USA".<br>
+
+<h3> <choose> Mutually Exclusive Conditional Execution <a
+ href="../ShowSource.jsp?filename=/conditionals/Choose.jsp"><img src="../images/code.gif" width="24" height="24""
+ border="0"></a>
+ <a href="Choose.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>Customers from the USA will be printed in blue, those from Canada in red, and
+ others in green.</p>
+
+<h3>Custom Logic Tag <a href="../ShowSource.jsp?filename=/conditionals/CustomLogicTag.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a> <a href="CustomLogicTag.jsp"><img
+ src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>JSTL exposes in its API the abstract class ConditionalTagSupport to facilitate
+ the implementation of custom conditional tags that leverage the standard conditional
+ behavior defined in JSTL. This example shows custom tag <usCustomer> that
+ returns true if its customer attribute value points to a US customer. It can
+ be used both in the context of a simple conditional execution, as well as in
+ the context of a mutually conditional execution by exposing the result of the
+ conditional execution in a JSP page attribute via the tag attribute 'var'. </p>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/elsupport/Out.jsp b/standard-examples/src/main/webapp/elsupport/Out.jsp
new file mode 100644
index 0000000..866e700
--- /dev/null
+++ b/standard-examples/src/main/webapp/elsupport/Out.jsp
@@ -0,0 +1,34 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<html>
+<head>
+ <title>JSTL: Expression Language Support -- Expr Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3><c:out></h3>
+
+<table border="1">
+ <c:forEach var="customer" items="${customers}">
+ <tr>
+ <td><c:out value="${customer.lastName}"/></td>
+ <td><c:out value="${customer.phoneHome}" default="no home phone specified"/></td>
+ <td>
+ <c:out value="${customer.phoneCell}" escapeXml="false">
+ <font color="red">no cell phone specified</font>
+ </c:out>
+ </td>
+ </tr>
+ </c:forEach>
+</table>
+
+<h4><c:out> with Reader object</h4>
+<%
+ java.io.Reader reader1 = new java.io.StringReader("<foo>Text for a Reader!</foo>");
+ pageContext.setAttribute("myReader1", reader1);
+ java.io.Reader reader2 = new java.io.StringReader("<foo>Text for a Reader!</foo>");
+ pageContext.setAttribute("myReader2", reader2);
+%>
+Reader1 (escapeXml=true) : <c:out value="${myReader1}"/><br>
+Reader2 (escapeXml=false): <c:out value="${myReader2}" escapeXml="false"/><br>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/elsupport/Set.jsp b/standard-examples/src/main/webapp/elsupport/Set.jsp
new file mode 100644
index 0000000..cbfd706
--- /dev/null
+++ b/standard-examples/src/main/webapp/elsupport/Set.jsp
@@ -0,0 +1,34 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Expression Language Support -- Set Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3><c:set></h3>
+
+<h4>Setting application scope attribute "customerTable"</h4>
+
+<c:set var="customerTable" scope="application">
+ <table border="1">
+ <c:forEach var="customer" items="${customers}">
+ <tr>
+ <td>${customer.lastName}</td>
+ <td><c:out value="${customer.address}" default="no address specified"/></td>
+ <td>
+ <c:out value="${customer.address}">
+ <font color="red">no address specified</font>
+ </c:out>
+ </td>
+ </tr>
+ </c:forEach>
+ </table>
+</c:set>
+
+<p>
+ Using customerTable in another JSP page
+ <a href="../ShowSource.jsp?filename=/elsupport/Set2.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="../elsupport/Set2.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/elsupport/Set2.jsp b/standard-examples/src/main/webapp/elsupport/Set2.jsp
new file mode 100644
index 0000000..552291c
--- /dev/null
+++ b/standard-examples/src/main/webapp/elsupport/Set2.jsp
@@ -0,0 +1,16 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<html>
+<head>
+ <title>JSTL: Expression Language Support -- Set 2 Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3><c:set></h3>
+
+<h4>Using "customerTable" application scope attribute defined in Set.jsp a first time</h4>
+<c:out value="${customerTable}" escapeXml="false"/>
+
+<h4>Using "customerTable" application scope attribute defined in Set.jsp a second time</h4>
+<c:out value="${customerTable}" escapeXml="false"/>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/elsupport/index.html b/standard-examples/src/main/webapp/elsupport/index.html
new file mode 100644
index 0000000..a0cadb6
--- /dev/null
+++ b/standard-examples/src/main/webapp/elsupport/index.html
@@ -0,0 +1,64 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: General-Purpose Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>General-Purpose Tags Examples</h2>
+
+<h3><out> <a href="../ShowSource.jsp?filename=/elsupport/Out.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../elsupport/Out.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+This example features <out> used with default values using the default attribute
+as well as the tag's body content. <br>
+
+<h3> <set> <a href="../ShowSource.jsp?filename=/elsupport/Set.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../elsupport/Set.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>We set the value of an application scope attribute from the <set> tag
+ body content. This application scope variable is then used in a second JSP page.</p>
+<!--
+<h3><declare> <a href="../ShowSource.jsp?filename=/elsupport/Declare.jsp"><img src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="../elsupport/Declare.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+<p>In order for JSTL tags to collaborate with custom tags that only accept rtexprvalues,
+ the <declare> tag must be used to create a scripting variable. In this
+ example, the page attribute created by the <forEach> tag is used in the
+ <declare> tag to export a scripting variable that is then used in custom
+ tag <customerFmt>.</p>
+-->
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/format/Demo.jsp b/standard-examples/src/main/webapp/format/Demo.jsp
new file mode 100644
index 0000000..a8763a7
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/Demo.jsp
@@ -0,0 +1,124 @@
+<%@ page import="java.util.Enumeration, java.util.Locale" %>
+<%@ page import="javax.servlet.jsp.jstl.core.Config" %>
+
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Demo Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>Demo</h3>
+
+<p>
+ The following bundles exist in the web application: 'Resources', 'Resources_de', 'Resources_fr', 'Resources_it'.
+ 'Resources' is the 'base' bundle and contains all messages in English. The italian bundle only holds one message
+ (key=greetingMorning).
+</p>
+<c:if test="${!empty param.locale}">
+ <fmt:setLocale value="${param.locale}" scope="page"/>
+</c:if>
+
+<c:if test="${!empty param.fallback}">
+ <% Config.set(request, Config.FMT_FALLBACK_LOCALE, request.getParameter("fallback")); %>
+</c:if>
+
+<table>
+ <tr>
+ <td><b>Set application-based locale:</b></td>
+ <td>
+ <a href='?locale=fr&fallback=<c:out value="${param.fallback}"/>'>French</a> •
+ <a href='?locale=de&fallback=<c:out value="${param.fallback}"/>'>German</a> •
+ <a href='?locale=it&fallback=<c:out value="${param.fallback}"/>'>Italian</a> •
+ <a href='?locale=es&fallback=<c:out value="${param.fallback}"/>'>Spanish (no bundle)</a> •
+ <a href='?locale=&fallback=<c:out value="${param.fallback}"/>'>None</a>
+ </td>
+ </tr>
+ <tr>
+ <td align="right"><b>Set fallback locale:</b></td>
+ <td>
+ <a href='?locale=<c:out value="${param.locale}"/>&fallback=fr'>French</a> •
+ <a href='?locale=<c:out value="${param.locale}"/>&fallback=de'>German</a> •
+ <a href='?locale=<c:out value="${param.locale}"/>&fallback=it'>Italian</a> •
+ <a href='?locale=<c:out value="${param.locale}"/>&fallback=es'>Spanish (no bundle)</a> •
+ <a href='?locale=<c:out value="${param.locale}"/>&fallback='>None</a>
+ </td>
+</table>
+<p>
+
+ Request parameter "locale": <c:out value="${param.locale}"/><br>
+ <i>(This value is used to set the application based locale for this example)</i>
+
+<p>
+
+ Application based locale: <%=Config.find(pageContext, Config.FMT_LOCALE)%><br>
+ <i>(javax.servlet.jsp.jstl.fmt.locale configuration setting)</i>
+
+<p>
+
+ Browser-Based locales:
+ <%
+ Enumeration enum_ = request.getLocales();
+ while (enum_.hasMoreElements()) {
+ Locale locale = (Locale)enum_.nextElement();
+ out.print(locale);
+ out.print(" ");
+ }
+%>
+ <br>
+ <i>(ServletRequest.getLocales() on the incoming request)</i>
+
+<p>
+
+ Fallback locale: <%=Config.find(pageContext, Config.FMT_FALLBACK_LOCALE)%><br>
+ <i>(javax.servlet.jsp.jstl.fmt.fallbackLocale configuration setting)</i>
+
+<p>
+
+ <jsp:useBean id="now" class="java.util.Date"/>
+<h4>
+ <fmt:formatDate value="${now}" dateStyle="full"/> •
+ <fmt:formatDate value="${now}" type="time"/>
+</h4>
+
+<p>
+
+ <fmt:bundle basename="org.apache.taglibs.standard.examples.i18n.Resources">
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">KEY</th>
+ <th align="left">VALUE</th>
+ </tr>
+ <tr>
+ <td>greetingMorning</td>
+ <td><fmt:message key="greetingMorning"/></td>
+ </tr>
+ <tr>
+ <td>greetingEvening</td>
+ <td><fmt:message key="greetingEvening"/></td>
+ </tr>
+ <tr>
+ <td>currentTime</td>
+ <td>
+ <fmt:message key="currentTime">
+ <fmt:param value="${now}"/>
+ </fmt:message>
+ </td>
+ </tr>
+ <tr>
+ <td>serverInfo</td>
+ <td><fmt:message key="serverInfo"/></td>
+ </tr>
+ <tr>
+ <td>undefinedKey</td>
+ <td><fmt:message key="undefinedKey"/></td>
+ </tr>
+</table>
+</fmt:bundle>
+
+<p>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/FormatDateTime.jsp b/standard-examples/src/main/webapp/format/FormatDateTime.jsp
new file mode 100644
index 0000000..f1ea9ac
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/FormatDateTime.jsp
@@ -0,0 +1,75 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Date and Time Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Formatting dates and times using <tt>en-US</tt> locale</h3>
+
+<jsp:useBean id="now" class="java.util.Date"/>
+<fmt:setLocale value="en-US"/>
+
+<ul>
+ <li> Formatting current date as "GMT":<br>
+ <fmt:timeZone value="GMT">
+ <fmt:formatDate value="${now}" type="both" dateStyle="full"
+ timeStyle="full"/>
+ </fmt:timeZone>
+
+ <li> Formatting current date as "GMT+1:00", and parsing
+ its date and time components:<br>
+ <fmt:timeZone value="GMT+1:00">
+ <fmt:formatDate value="${now}" type="both" dateStyle="full"
+ timeStyle="full" var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" dateStyle="full"
+ timeStyle="full" timeZone="PST" var="parsedDateTime"/>
+ Parsed date: <fmt:formatDate value="${parsedDateTime}" type="date"
+ dateStyle="full"/><br>
+ Parsed time:
+ <fmt:formatDate value="${parsedDateTime}" type="time"
+ timeStyle="full"/>
+ </fmt:timeZone>
+
+ <li> Parsing SHORT version of current time in different time zones:<br>
+ <fmt:formatDate value="${now}" type="both" timeStyle="short"
+ var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT+1:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+1:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT+3:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+3:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="PST" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "PST")
+
+ <li> Parsing FULL version of current time in different time zones<br>
+ (parse result is independent of specified time zone):<br>
+ <fmt:formatDate value="${now}" type="both" timeStyle="full" var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT+1:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+1:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT+3:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+3:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="PST" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "PST")
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/FormatDateTimeBrowserLocale.jsp b/standard-examples/src/main/webapp/format/FormatDateTimeBrowserLocale.jsp
new file mode 100644
index 0000000..33817e1
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/FormatDateTimeBrowserLocale.jsp
@@ -0,0 +1,74 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Date and Time Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Formatting dates and times using browser-based locale</h3>
+
+<jsp:useBean id="now" class="java.util.Date"/>
+
+<ul>
+ <li> Formatting current date as "GMT":<br>
+ <fmt:timeZone value="GMT">
+ <fmt:formatDate value="${now}" type="both" dateStyle="full"
+ timeStyle="full"/>
+ </fmt:timeZone>
+
+ <li> Formatting current date as "GMT+1:00", and parsing
+ its date and time components:<br>
+ <fmt:timeZone value="GMT+1:00">
+ <fmt:formatDate value="${now}" type="both" dateStyle="full"
+ timeStyle="full" var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" dateStyle="full"
+ timeStyle="full" timeZone="PST" var="parsedDateTime"/>
+ Parsed date: <fmt:formatDate value="${parsedDateTime}" type="date"
+ dateStyle="full"/><br>
+ Parsed time:
+ <fmt:formatDate value="${parsedDateTime}" type="time"
+ timeStyle="full"/>
+ </fmt:timeZone>
+
+ <li> Parsing SHORT version of current time in different time zones:<br>
+ <fmt:formatDate value="${now}" type="both" timeStyle="short"
+ var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT+1:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+1:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="GMT+3:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+3:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="short"
+ timeZone="PST" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "PST")
+
+ <li> Parsing FULL version of current time in different time zones<br>
+ (parse result is independent of specified time zone):<br>
+ <fmt:formatDate value="${now}" type="both" timeStyle="full" var="formatted"/>
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT+1:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+1:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="GMT+3:00" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "GMT+3:00")<br>
+
+ <fmt:parseDate value="${formatted}" type="both" timeStyle="full"
+ timeZone="PST" var="parsed"/>
+ <c:out value="${parsed}"/> (parsed in "PST")
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/FormatNumber.jsp b/standard-examples/src/main/webapp/format/FormatNumber.jsp
new file mode 100644
index 0000000..fae2a5b
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/FormatNumber.jsp
@@ -0,0 +1,41 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Number, Currency, and Percent
+ Example
+ </title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Formatting numbers, currencies, and percentages using <tt>en-US</tt>
+ locale
+</h3>
+
+<fmt:setLocale value="en-US"/>
+
+<ul>
+ <li> Format "123456789" as number:<br>
+ <fmt:formatNumber value="123456789"/>
+
+ <li> Format "123456789" as percent:<br>
+ <fmt:formatNumber type="percent">123456789</fmt:formatNumber>
+
+ <li> Format "12345.67" as currency:<br>
+ <fmt:formatNumber value="12345.67" type="currency"/>
+
+ <li> Format "12345.67" as currency, with
+ grouping turned off, the maximum number of digits in the integer portion
+ limited to 4, and no fraction portion:<br>
+ <fmt:formatNumber value="12345.67" type="currency"
+ groupingUsed="false" maxIntegerDigits="4"
+ maxFractionDigits="0"/>
+
+ <li> Format "12345.67" as currency:<br>
+ <fmt:formatNumber value="12345.67" type="currency"/><br>
+ then parse its integer portion only and output the result:<br>
+ <fmt:formatNumber value="12345.67" type="currency" var="cur"/>
+ <fmt:parseNumber value="${cur}" type="currency" integerOnly="true"/>
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/FormatNumberBrowserLocale.jsp b/standard-examples/src/main/webapp/format/FormatNumberBrowserLocale.jsp
new file mode 100644
index 0000000..3325ea8
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/FormatNumberBrowserLocale.jsp
@@ -0,0 +1,52 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Number, Currency, and Percent
+ Example
+ </title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Formatting numbers, currencies, and percentages using browser-based
+ locale
+</h3>
+
+<c:catch var="ex">
+ <ul>
+ <li> Format "123456789" as number:<br>
+ <fmt:formatNumber value="123456789"/>
+
+ <li> Format "123456789" as percent:<br>
+ <fmt:formatNumber type="percent">123456789</fmt:formatNumber>
+
+ <li> Format "12345.67" as currency:<br>
+ <fmt:formatNumber value="12345.67" type="currency"/>
+
+ <li> Format "12345.67" as currency, with
+ grouping turned off, the maximum number of digits in the integer portion
+ limited to 4, and no fraction portion:<br>
+ <fmt:formatNumber value="12345.67" type="currency"
+ groupingUsed="false" maxIntegerDigits="4"
+ maxFractionDigits="0"/>
+
+ <li> Format "12345.67" as currency:<br>
+ <fmt:formatNumber value="12345.67" type="currency"/><br>
+ then parse its integer portion only and output the result:<br>
+ <fmt:formatNumber value="12345.67" type="currency" var="cur"/>
+ <fmt:parseNumber value="${cur}" type="currency" integerOnly="true"/>
+ </ul>
+</c:catch>
+
+<c:if test="${not empty ex}">
+ <font color="#FF0000">
+ <br> The following error has occurred:<br><br>
+ <c:out value="${ex}" escapeXml='false'/> <br>
+ <c:if test="${ex.rootCause.class.name == 'java.text.ParseException' && pageContext.response.locale == 'de_DE'}">
+ <br> This is due to a known bug in java.text.NumberFormat (Bugtraq bugid: 4709840).
+ </c:if>
+ </font>
+</c:if>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/GermanLocale.jsp b/standard-examples/src/main/webapp/format/GermanLocale.jsp
new file mode 100644
index 0000000..47ff5f4
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/GermanLocale.jsp
@@ -0,0 +1,18 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- German Locale Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>German Locale</h3>
+
+<fmt:setLocale value="de"/>
+<fmt:bundle basename="org.apache.taglibs.standard.examples.i18n.Resources">
+ <fmt:message>
+ greetingMorning
+ </fmt:message>
+</fmt:bundle>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/GermanUmlautCorrect.jsp b/standard-examples/src/main/webapp/format/GermanUmlautCorrect.jsp
new file mode 100644
index 0000000..58c9985
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/GermanUmlautCorrect.jsp
@@ -0,0 +1,23 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Request Encoding Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>German Umlaut characters decoded correctly:</h3>
+
+<fmt:requestEncoding value="UTF-8"/>
+
+<ul>
+ <li>a umlaut:
+ <c:out value="${param.a_umlaut}"/>
+ <li>o umlaut:
+ <c:out value="${param.o_umlaut}"/>
+ <li>u umlaut:
+ <c:out value="${param.u_umlaut}"/>
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/GermanUmlautIncorrect.jsp b/standard-examples/src/main/webapp/format/GermanUmlautIncorrect.jsp
new file mode 100644
index 0000000..686f665
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/GermanUmlautIncorrect.jsp
@@ -0,0 +1,21 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Request Encoding Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>German Umlaut characters decoded incorrectly:</h3>
+
+<ul>
+ <li>a umlaut:
+ <c:out value="${param.a_umlaut}"/>
+ <li>o umlaut:
+ <c:out value="${param.o_umlaut}"/>
+ <li>u umlaut:
+ <c:out value="${param.u_umlaut}"/>
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/ItalianLocale.jsp b/standard-examples/src/main/webapp/format/ItalianLocale.jsp
new file mode 100644
index 0000000..c59c02f
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/ItalianLocale.jsp
@@ -0,0 +1,15 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Italian Locale Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Italian Locale</h3>
+
+<fmt:setLocale value="it_IT"/>
+<fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.Resources" var="itBundle" scope="page"/>
+<fmt:message key="greetingMorning" bundle="${itBundle}"/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/MissingResourceBundle.jsp b/standard-examples/src/main/webapp/format/MissingResourceBundle.jsp
new file mode 100644
index 0000000..b7e9f64
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/MissingResourceBundle.jsp
@@ -0,0 +1,22 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Missing Resource Bundle Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Missing Resource Bundle</h3>
+
+<ul>
+ <li> Implicit collaboration with <bundle> (via ancestry chain):<br>
+ <fmt:bundle basename="org.apache.taglibs.standard.examples.i18n.MissingResources">
+ <fmt:message key="greetingMorning"/>
+ </fmt:bundle>
+
+ <li> Explicit collaboration with <bundle> (via <tt>var</tt> attribute):<br>
+ <fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.MissingResources" var="enBundle"/>
+ <fmt:message key="greetingEvening" bundle="${enBundle}"/>
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/ParametricReplacement.jsp b/standard-examples/src/main/webapp/format/ParametricReplacement.jsp
new file mode 100644
index 0000000..20feef9
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/ParametricReplacement.jsp
@@ -0,0 +1,66 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Parametric Replacement Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parametric Replacement</h3>
+
+<jsp:useBean id="now" class="java.util.Date"/>
+
+<fmt:setLocale value="de"/>
+<fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.Resources" var="deBundle"/>
+
+<fmt:formatDate value="${now}" type="both" var="currentDateString"/>
+<fmt:parseDate value="${currentDateString}" type="both" var="currentDate"/>
+
+<ul>
+ <li> Using single <param> with 'value' evaluating to String:<br>
+ <fmt:message key="currentTime" bundle="${deBundle}">
+ <fmt:param value="${currentDateString}"/>
+ </fmt:message>
+
+ <li> Using single <param> with 'value' evaluating to <tt>java.util.Date</tt>:<br>
+ <fmt:message key="currentTime" bundle="${deBundle}">
+ <fmt:param value="${currentDate}"/>
+ </fmt:message>
+
+ <li> Using single <param> with body:<br>
+ <fmt:message key="currentTime" bundle="${deBundle}">
+ <fmt:param>
+ <fmt:formatDate value="${now}" type="both"/>
+ </fmt:param>
+ </fmt:message>
+
+ <li> Using multiple parameters:<br>
+ <fmt:message key="serverInfo" bundle="${deBundle}">
+ <c:forEach var="arg" items="${serverInfoArgs}">
+ <fmt:param value="${arg}"/>
+ </c:forEach>
+ </fmt:message>
+</ul>
+
+<ul>
+ <fmt:setLocale value="es"/>
+ <fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.Resources" var="esBundle"/>
+ <li>Locale set to Spanish yields a locale-less localization context. Formatting still done
+ using the preferred locale:<br>
+ <fmt:message key="currentTime" bundle="${esBundle}">
+ <fmt:param value="${currentDate}"/>
+ </fmt:message>
+ </li>
+
+ <fmt:setLocale value="en"/>
+ <fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.Resources" var="enBundle"/>
+ <li>Locale set to English yields a locale-less localization context. Formatting still done
+ using the preferred locale:<br>
+ <fmt:message key="currentTime" bundle="${esBundle}">
+ <fmt:param value="${currentDate}"/>
+ </fmt:message>
+ </li>
+</ul>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/PrefixAttribute.jsp b/standard-examples/src/main/webapp/format/PrefixAttribute.jsp
new file mode 100644
index 0000000..0d12fdb
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/PrefixAttribute.jsp
@@ -0,0 +1,16 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Prefix Attribute Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Prefix Attribute</h3>
+
+<fmt:setLocale value="de"/>
+<fmt:bundle basename="org.apache.taglibs.standard.examples.i18n.Resources" prefix="com.acme.labels.">
+ <fmt:message key="cancel"/>
+</fmt:bundle>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/RequestEncoding.jsp b/standard-examples/src/main/webapp/format/RequestEncoding.jsp
new file mode 100644
index 0000000..fa1a463
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/RequestEncoding.jsp
@@ -0,0 +1,20 @@
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Request Encoding Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+This page contains two links, and sends German Umlaut characters as request
+parameter values to each of the linked pages.<br>
+Only one of the linked pages decodes and displays the request parameter values
+correctly:
+
+<ul>
+ <li><a href="GermanUmlautIncorrect.jsp?a_umlaut=%C3%A4&o_umlaut=%C3%B6&u_umlaut=%C3%BC">German Umlaut characters
+ decoded incorrectly</a>
+ <li><a href="GermanUmlautCorrect.jsp?a_umlaut=%C3%A4&o_umlaut=%C3%B6&u_umlaut=%C3%BC">German Umlaut characters
+ decoded correctly</a>
+</ul>
+
+</body>
+</html>
+
diff --git a/standard-examples/src/main/webapp/format/UndefinedKey.jsp b/standard-examples/src/main/webapp/format/UndefinedKey.jsp
new file mode 100644
index 0000000..8b182d7
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/UndefinedKey.jsp
@@ -0,0 +1,15 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<html>
+<head>
+ <title>JSTL: Formatting/I18N Support -- Undefined Key Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Undefined Key</h3>
+
+<fmt:setLocale value="it"/>
+<fmt:setBundle basename="org.apache.taglibs.standard.examples.i18n.Resources" var="itBundle"/>
+<fmt:message key="invalidKey" bundle="${itBundle}"/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/format/index.html b/standard-examples/src/main/webapp/format/index.html
new file mode 100644
index 0000000..bc7723f
--- /dev/null
+++ b/standard-examples/src/main/webapp/format/index.html
@@ -0,0 +1,115 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: I18N-Capable Formatting Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>I18N-Capable Formatting Tags Examples</h2>
+
+<h3>Demo <a href="../ShowSource.jsp?filename=/format/Demo.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="Demo.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Overview demo where the locale to be applied to the page may be changed dynamically.<br>
+
+<h3>German <a href="../ShowSource.jsp?filename=/format/GermanLocale.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="GermanLocale.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using resource bundle for German locale. <br>
+
+<h3>Italian <a href="../ShowSource.jsp?filename=/format/ItalianLocale.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="ItalianLocale.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using resource bundle for Italian locale. <br>
+
+<h3>Missing Resource Bundle <a href="../ShowSource.jsp?filename=/format/MissingResourceBundle.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="MissingResourceBundle.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Trying to access a resource bundle that does not exist. <br>
+
+<h3>Undefined Key <a href="../ShowSource.jsp?filename=/format/UndefinedKey.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="UndefinedKey.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Looking up an undefined key in a resource bundle. <br>
+
+<h3>Parametric Replacement <a href="../ShowSource.jsp?filename=/format/ParametricReplacement.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ParametricReplacement.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Parametric replacement examples. <br>
+
+<h3>Prefix <a href="../ShowSource.jsp?filename=/format/PrefixAttribute.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="PrefixAttribute.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Prepending prefix to message key. <br>
+
+<h3>Date <a href="../ShowSource.jsp?filename=/format/FormatDateTime.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="FormatDateTime.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Formatting dates and times using <tt>en-US</tt> locale. <br>
+
+<h3>Date <a href="../ShowSource.jsp?filename=/format/FormatDateTimeBrowserLocale.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="FormatDateTimeBrowserLocale.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Formatting dates and times using browser-based locale. <br>
+
+<h3>Number <a href="../ShowSource.jsp?filename=/format/FormatNumber.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="FormatNumber.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Formatting numbers using <tt>en-US</tt> locale. <br>
+
+<h3>Number <a href="../ShowSource.jsp?filename=/format/FormatNumberBrowserLocale.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="FormatNumberBrowserLocale.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Formatting numbers using browser-based locale. <br>
+
+<h3>Request Parameter Decoding <a href="../ShowSource.jsp?filename=/format/RequestEncoding.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="RequestEncoding.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Decoding and displaying request parameters using the appropriate charset. <br>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/functions/EscapeXml.jsp b/standard-examples/src/main/webapp/functions/EscapeXml.jsp
new file mode 100644
index 0000000..8c85fb9
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/EscapeXml.jsp
@@ -0,0 +1,41 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Escape Xml</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>Escape XML</h2>
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+
+<h4>fn:escapeXml</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>${fn:escapeXml(s1)}</td>
+ </tr>
+ <tr>
+ <td>
+ <foo>body of foo</foo>
+ </td>
+ <td>${fn:escapeXml("<foo>body of foo</foo>")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td> ${fn:escapeXml(undefined)}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td> ${fn:escapeXml("")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/Length.jsp b/standard-examples/src/main/webapp/functions/Length.jsp
new file mode 100644
index 0000000..1c21788
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/Length.jsp
@@ -0,0 +1,37 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Length</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+
+<h4>fn:length</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>${fn:length(s1)}</td>
+ </tr>
+ <tr>
+ <td>${customers}</td>
+ <td>${fn:length(customers)}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>${fn:length(undefined)}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td>${fn:length("")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/Replace.jsp b/standard-examples/src/main/webapp/functions/Replace.jsp
new file mode 100644
index 0000000..ea6e160
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/Replace.jsp
@@ -0,0 +1,55 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Replace</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>Replace</h2>
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+<c:set var="s2" value="one - two - three - one - two - three - one - two - three"/>
+<h4>fn:replace</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring Before</th>
+ <th>Substring After</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>e</td>
+ <td>*</td>
+ <td>${fn:replace(s1, "e", "*")}</td>
+ </tr>
+ <tr>
+ <td>${s2}</td>
+ <td>-</td>
+ <td>•</td>
+ <td>${fn:replace(s2, "-", "•")}</td>
+ </tr>
+ <tr>
+ <td>${s2}</td>
+ <td>two</td>
+ <td>empty</td>
+ <td>${fn:replace(s2, "two", "")}</td>
+ </tr>
+ <tr>
+ <td>${s2}</td>
+ <td>empty string</td>
+ <td>one</td>
+ <td>${fn:replace(s2, "", "one")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>one</td>
+ <td>two</td>
+ <td> ${fn:replace(undefined, "one", "two")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/SplitJoin.jsp b/standard-examples/src/main/webapp/functions/SplitJoin.jsp
new file mode 100644
index 0000000..0e1810c
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/SplitJoin.jsp
@@ -0,0 +1,87 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Split/Join</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>Split/Join</h2>
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+<c:set var="s3" value="one|two|three|four"/>
+<c:set var="s5" value="one|two+three*four"/>
+
+<h4>fn:split</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Delimiters</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${ex:display(fn:split(s1, ""))}</td>
+ </tr>
+ <tr>
+ <td>${s3}</td>
+ <td>|</td>
+ <td>${ex:display(fn:split(s3, "|"))}</td>
+ </tr>
+ <tr>
+ <td>${s3}</td>
+ <td>+</td>
+ <td>${ex:display(fn:split(s3, "+"))}</td>
+ </tr>
+ <tr>
+ <td>${s5}</td>
+ <td>|+</td>
+ <td>${ex:display(fn:split(s5, "|+"))}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td>empty string</td>
+ <td> ${ex:display(fn:split("", ""))}</td>
+ </tr>
+</table>
+
+<c:set var="a1" value='${fn:split(s1, " ")}'/>
+<h4>fn:join</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input Array</th>
+ <th>Separator</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${ex:display(a1)}</td>
+ <td> +</td>
+ <td>${fn:join(a1, " + ")}</td>
+ </tr>
+ <tr>
+ <td>${ex:display(a1)}</td>
+ <td><sep></td>
+ <td>${fn:join(a1, " <sep> ")}</td>
+ </tr>
+ <tr>
+ <td>${ex:display(a1)}</td>
+ <td>empty string</td>
+ <td>${fn:join(a1, "")}</td>
+ </tr>
+ <tr>
+ <td>${ex:display(a1)}</td>
+ <td>null</td>
+ <td>${fn:join(a1, null)}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td> ${fn:join(null, "")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/StringCapitalization.jsp b/standard-examples/src/main/webapp/functions/StringCapitalization.jsp
new file mode 100644
index 0000000..77a7f97
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/StringCapitalization.jsp
@@ -0,0 +1,55 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • String Capitalization</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>String Capitalization</h2>
+
+<c:set var="s1" value="There is a CASTLE on a CLOUD"/>
+
+<h4>fn:toLowerCase</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>${fn:toLowerCase(s1)}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td> ${fn:toLowerCase(undefined)}</td>
+ </tr>
+ <tr>
+ <td>empty</td>
+ <td> ${fn:toLowerCase("")}</td>
+ </tr>
+</table>
+
+<h4>fn:toUpperCase</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>${fn:toUpperCase(s1)}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td> ${fn:toUpperCase(undefined)}</td>
+ </tr>
+ <tr>
+ <td>empty</td>
+ <td> ${fn:toUpperCase("")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/StringSubset.jsp b/standard-examples/src/main/webapp/functions/StringSubset.jsp
new file mode 100644
index 0000000..1cf5909
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/StringSubset.jsp
@@ -0,0 +1,183 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • String Subset</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>String Subset</h2>
+
+<c:set var="zip" value="75843-5643"/>
+<c:set var="s1" value="There is a castle on a cloud"/>
+
+<h4>fn:substring</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>beginIndex</th>
+ <th>endIndex</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${zip}</td>
+ <td>6</td>
+ <td>-1</td>
+ <td>P.O. Box: ${fn:substring(zip, 6, -1)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>11</td>
+ <td>17</td>
+ <td>${fn:substring(s1, 11, 17)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>12</td>
+ <td>5</td>
+ <td> ${fn:substring(s1, 12, 5)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>23</td>
+ <td>-1</td>
+ <td>${fn:substring(s1, 23, -1)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>23</td>
+ <td>999</td>
+ <td>${fn:substring(s1, 23, 999)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>-1</td>
+ <td>-1</td>
+ <td>${fn:substring(s1, -1, -1)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>99</td>
+ <td>12</td>
+ <td> ${fn:substring(s1, 99, 12)}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td>2</td>
+ <td>6</td>
+ <td> ${fn:substring("", 2, 6)}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>2</td>
+ <td>6</td>
+ <td> ${fn:substring(undefined, 2, 6)}</td>
+ </tr>
+</table>
+
+<h4>fn:substringAfter</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${zip}</td>
+ <td>-</td>
+ <td>P.O. Box: ${fn:substringAfter(zip, "-")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>There</td>
+ <td>${fn:substringAfter(s1, "There")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>on a</td>
+ <td>${fn:substringAfter(s1, "on a")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>not found</td>
+ <td> ${fn:substringAfter(s1, "not found")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:substringAfter(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:substringAfter(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td>castle</td>
+ <td> ${fn:substringAfter("", "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td> ${fn:substringAfter(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td> ${fn:substringAfter(undefined, "")}</td>
+ </tr>
+</table>
+
+<h4>fn:substringBefore</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${zip}</td>
+ <td>-</td>
+ <td>Zip without P.O. Box: ${fn:substringBefore(zip, "-")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>on a</td>
+ <td>${fn:substringBefore(s1, "on a")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:substringBefore(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td> ${fn:substringBefore(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td> ${fn:substringBefore(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td>castle</td>
+ <td> ${fn:substringBefore("", "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td> ${fn:substringBefore(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td> ${fn:substringBefore(undefined, "")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/SubstringContained.jsp b/standard-examples/src/main/webapp/functions/SubstringContained.jsp
new file mode 100644
index 0000000..b8a7c80
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/SubstringContained.jsp
@@ -0,0 +1,227 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Substring Contained in String</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>Substring Contained in String</h2>
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+
+<h4>fn:contains</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:contains(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>CASTLE</td>
+ <td>${fn:contains(s1, "CASTLE")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:contains(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:contains(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td>${fn:contains(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td>${fn:contains(undefined, "")}</td>
+ </tr>
+</table>
+
+<h4>fn:containsIgnoreCase</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:containsIgnoreCase(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>CASTLE</td>
+ <td>${fn:containsIgnoreCase(s1, "CASTLE")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>CaStLe</td>
+ <td>${fn:containsIgnoreCase(s1, "CaStLe")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:containsIgnoreCase(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:containsIgnoreCase(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td>${fn:containsIgnoreCase(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td>${fn:containsIgnoreCase(undefined, "")}</td>
+ </tr>
+</table>
+
+<h4>fn:startsWith</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:startsWith(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>There is</td>
+ <td>${fn:startsWith(s1, "There is")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:startsWith(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:startsWith(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td>${fn:startsWith(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td>${fn:startsWith(undefined, "")}</td>
+ </tr>
+</table>
+
+<h4>fn:endsWith</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:endsWith(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>cloud</td>
+ <td>${fn:endsWith(s1, "cloud")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:endsWith(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:endsWith(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td>${fn:endsWith(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td>${fn:endsWith(undefined, "")}</td>
+ </tr>
+</table>
+
+<h4>fn:indexOf</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Substring</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>castle</td>
+ <td>${fn:indexOf(s1, "castle")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>cloud</td>
+ <td>${fn:indexOf(s1, "cloud")}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>null</td>
+ <td>${fn:indexOf(s1, undefined)}</td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>empty string</td>
+ <td>${fn:indexOf(s1, "")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>castle</td>
+ <td>${fn:indexOf(undefined, "castle")}</td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td>empty string</td>
+ <td>${fn:indexOf(undefined, "")}</td>
+ </tr>
+ <c:set var="text" value="Products List (2003/05/01)"/>
+ <tr>
+ <td colspan="3">Display text in between brackets</td>
+ </tr>
+ <tr>
+ <td>${text}</td>
+ <td>'(' and ')'</td>
+ <td>${fn:substring(text, fn:indexOf(text, '(')+1, fn:indexOf(text, ')'))}</td>
+ </tr>
+</table>
+
+<p>
+
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/Trim.jsp b/standard-examples/src/main/webapp/functions/Trim.jsp
new file mode 100644
index 0000000..e06dbf3
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/Trim.jsp
@@ -0,0 +1,56 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+
+<html>
+<head>
+ <title>JSTL Functions • Trim</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h2>Trim</h2>
+
+<c:set var="s1" value="There is a castle on a cloud"/>
+<c:set var="custId" value=" 123 "/>
+
+<h4>fn:trim</h4>
+<table cellpadding="5" border="1">
+ <tr>
+ <th align="left">Input String</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>
+ <pre>${custId} (without trim)</pre>
+ </td>
+ <td><c:url value="http://acme.com/cust"><c:param name="custId" value="${custId}"/></c:url></td>
+ </tr>
+ <tr>
+ <td>
+ <pre>${custId} (with trim)</pre>
+ </td>
+ <td><c:url value="http://acme.com/cust"><c:param name="custId" value="${fn:trim(custId)}"/></c:url></td>
+ </tr>
+ <tr>
+ <td>${s1}</td>
+ <td>${fn:trim(s1)}</td>
+ </tr>
+ <tr>
+ <td>
+ <pre> 3 spaces before and after </pre>
+ </td>
+ <td>
+ <pre>${fn:trim(" 3 spaces before and after ")}</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>null</td>
+ <td> ${fn:trim(undefined)}</td>
+ </tr>
+ <tr>
+ <td>empty string</td>
+ <td> ${fn:trim("")}</td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/functions/index.html b/standard-examples/src/main/webapp/functions/index.html
new file mode 100644
index 0000000..da3d8f2
--- /dev/null
+++ b/standard-examples/src/main/webapp/functions/index.html
@@ -0,0 +1,95 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Functions Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Functions Examples</h2>
+
+<h3>Length of a Collection or a String <a href="../ShowSource.jsp?filename=/functions/Length.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="Length.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>length</code><br>
+
+<h3>String Capitalization <a
+ href="../ShowSource.jsp?filename=/functions/StringCapitalization.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="StringCapitalization.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>toUpperCase toLowerCase</code><br>
+
+<h3>String Subset <a
+ href="../ShowSource.jsp?filename=/functions/StringSubset.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="StringSubset.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>substring substringAfter substringBefore</code><br>
+
+<h3>Trim <a
+ href="../ShowSource.jsp?filename=/functions/Trim.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="Trim.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>trim</code><br>
+
+<h3>Replace <a
+ href="../ShowSource.jsp?filename=/functions/Replace.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="Replace.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>replace</code><br>
+
+<h3>Substring Contained in String <a
+ href="../ShowSource.jsp?filename=/functions/SubstringContained.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="SubstringContained.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>contains containsIgnoreCase startsWith endsWith indexOf</code><br>
+
+<h3>Split/Join <a
+ href="../ShowSource.jsp?filename=/functions/SplitJoin.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="SplitJoin.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>split join</code><br>
+
+<h3>EscapeXml <a
+ href="../ShowSource.jsp?filename=/functions/EscapeXml.jsp"><img src="../images/code.gif" width="24" height="24"
+ border="0"></a>
+ <a href="EscapeXml.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+<code>escapeXml</code><br>
+
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/global.css b/standard-examples/src/main/webapp/global.css
new file mode 100644
index 0000000..3c907cf
--- /dev/null
+++ b/standard-examples/src/main/webapp/global.css
@@ -0,0 +1,15 @@
+body {
+ font-family: Arial, Helvetica, sans-serif
+}
+
+h1 {
+ color: #000099
+}
+
+h2 {
+ color: #000099
+}
+
+h3 {
+ color: #000099
+}
diff --git a/standard-examples/src/main/webapp/images/code.gif b/standard-examples/src/main/webapp/images/code.gif
new file mode 100644
index 0000000..93af2cd
Binary files /dev/null and b/standard-examples/src/main/webapp/images/code.gif differ
diff --git a/standard-examples/src/main/webapp/images/execute.gif b/standard-examples/src/main/webapp/images/execute.gif
new file mode 100644
index 0000000..f64d70f
Binary files /dev/null and b/standard-examples/src/main/webapp/images/execute.gif differ
diff --git a/standard-examples/src/main/webapp/images/return.gif b/standard-examples/src/main/webapp/images/return.gif
new file mode 100644
index 0000000..af4f68f
Binary files /dev/null and b/standard-examples/src/main/webapp/images/return.gif differ
diff --git a/standard-examples/src/main/webapp/import/Absolute.jsp b/standard-examples/src/main/webapp/import/Absolute.jsp
new file mode 100644
index 0000000..a846c59
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/Absolute.jsp
@@ -0,0 +1,19 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Absolute URL Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Absolute URL</h3>
+
+<h4>CNN's RSS XML feed:</h4>
+<blockquote>
+ <ex:escapeHtml>
+ <c:import url="http://www.cnn.com/cnn.rss"/>
+ </ex:escapeHtml>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/AbsoluteFtp.jsp b/standard-examples/src/main/webapp/import/AbsoluteFtp.jsp
new file mode 100644
index 0000000..a366295
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/AbsoluteFtp.jsp
@@ -0,0 +1,18 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Absolute URL Example (non-HTTP)</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Absolute URL (non-HTTP)</h3>
+
+<h4>Free Software Foundation's FTP site:</h4>
+<blockquote>
+ <pre>
+ <c:import url="ftp://ftp.gnu.org/README"/>
+ </pre>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/ContextRelative.jsp b/standard-examples/src/main/webapp/import/ContextRelative.jsp
new file mode 100644
index 0000000..db342a9
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/ContextRelative.jsp
@@ -0,0 +1,20 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Context-relative URL example</title>
+</head>
+<body bgcolor="#FFFFFF">
+Assuming you have the "examples" webapp installed, here's a file from it...
+
+URL:<c:out value="${_contextUrl}"/><br>
+Name:<c:out value="${_contextName}"/>
+
+<blockquote>
+ <pre>
+ <c:import url="${_contextUrl}" context="${_contextName}"/>
+ </pre>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/Encode.jsp b/standard-examples/src/main/webapp/import/Encode.jsp
new file mode 100644
index 0000000..3e84393
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/Encode.jsp
@@ -0,0 +1,47 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- URL Encoding Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>URL Encoding</h3>
+
+<h4><c:url></h4>
+
+Disable cookies in your browser to see URL rewriting.
+
+<table border="1" bgcolor="#dddddd">
+ <tr>
+ <td>"base", param=ABC</td>
+ <td><c:url value="base"><c:param name="param" value="ABC"/></c:url></td>
+ </tr>
+ <tr>
+ <td>"base", param=123</td>
+ <td><c:url value="base"><c:param name="param" value="123"/></c:url></td>
+ </tr>
+ <tr>
+ <td>"base", param=&</td>
+ <td><c:url value="base"><c:param name="param" value="&"/></c:url></td>
+ </tr>
+ <tr>
+ <td>"base", param="JSTL is fun"</td>
+ <td><c:url value="base"><c:param name="param" value="JSTL is fun"/></c:url></td>
+ </tr>
+ <tr>
+ <td>"base", param="�@foo-bar"</td>
+ <td><c:url value="base"><c:param name="param" value="�@foo-bar"/></c:url></td>
+ </tr>
+ <tr>
+ <td>"base", m�t�o="l�g�re pluie @ Saint-Denis-de-la-R�union"</td>
+ <td><c:url value="base"><c:param name="m�t�o" value="l�g�re pluie @ Saint-Denis-de-la-R�union"/></c:url></td>
+ </tr>
+</table>
+
+<p>
+ Compose the url, then use it in an HTML anchor tag:
+ <c:url var="url" value="Encode.jsp">
+ <c:param name="arg1" value="value of arg1"/>
+ <c:param name="arg2" value="value of arg2"/>
+ </c:url>
+ <a href='<c:out value="${url}"/>'>Link back to this page (<c:out value="${url}"/>)</a>
\ No newline at end of file
diff --git a/standard-examples/src/main/webapp/import/EncodeContextRelative.jsp b/standard-examples/src/main/webapp/import/EncodeContextRelative.jsp
new file mode 100644
index 0000000..4737915
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/EncodeContextRelative.jsp
@@ -0,0 +1,20 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- URL Encoding Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>URL Encoding</h3>
+
+<h4><urlEncode></h4>
+
+<c:url var="param1" value="${_paramValue1}"/>
+<c:url var="param2" value="${_paramValue2}"/>
+<c:url var="param3" value="${_paramValue3}"/>
+<c:out value="${_contextUrl}"/>
+<c:import url="${_contextUrl}" context="${_contextName}">
+ <c:param name="${_paramName1}" value="${param1}"/>
+ <c:param name="${_paramName2}" value="${param2}"/>
+ <c:param name="${_paramName3}" value="${param3}"/>
+</c:import>
diff --git a/standard-examples/src/main/webapp/import/ExposeString.jsp b/standard-examples/src/main/webapp/import/ExposeString.jsp
new file mode 100644
index 0000000..6996870
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/ExposeString.jsp
@@ -0,0 +1,20 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- String exposure</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>String exposure</h3>
+
+<c:import var="cnn" url="http://www.cnn.com/cnn.rss"/>
+
+<h4>CNN's RSS XML feed:</h4>
+<blockquote>
+ <pre>
+ <c:out value="${cnn}"/>
+ </pre>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/ExposeStringRelative.jsp b/standard-examples/src/main/webapp/import/ExposeStringRelative.jsp
new file mode 100644
index 0000000..aada929
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/ExposeStringRelative.jsp
@@ -0,0 +1,17 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- String exposure for relative URL</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>String exposure for relative URL</h3>
+
+<h4>Escaped (raw HTML)</h4>
+
+<c:import var="cnn" url="LocalSample.jsp"/>
+
+<c:out value="${cnn}"/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/LocalSample.jsp b/standard-examples/src/main/webapp/import/LocalSample.jsp
new file mode 100644
index 0000000..9eb6de5
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/LocalSample.jsp
@@ -0,0 +1,14 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Simple static example to be included
+ in other pages</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Local example target page</h3>
+
+<h4>• This output comes from LocalSample.jsp • </h4>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/Param.jsp b/standard-examples/src/main/webapp/import/Param.jsp
new file mode 100644
index 0000000..9ab6cb5
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/Param.jsp
@@ -0,0 +1,13 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<%--
+ -- These URLs likely don't exist, but the error that gets reported
+ -- back should help you see how <param> modifies the URL.
+ --
+ --%>
+
+<c:import url="http://localhost/foo" charEncoding="foo">
+ <c:param name="a" value="b"/>
+ <c:param name="c" value="d"/>
+ <c:param name="equals" value="="/> <%-- encoded --%>
+</c:import>
diff --git a/standard-examples/src/main/webapp/import/Relative.jsp b/standard-examples/src/main/webapp/import/Relative.jsp
new file mode 100644
index 0000000..a46e579
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/Relative.jsp
@@ -0,0 +1,18 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Relative URL Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Relative URL</h3>
+
+<h4>Import from current directory:</h4>
+<blockquote>
+ <pre>
+ <c:import url="LocalSample.jsp"/>
+ </pre>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/StartSlash.jsp b/standard-examples/src/main/webapp/import/StartSlash.jsp
new file mode 100644
index 0000000..f7932c1
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/StartSlash.jsp
@@ -0,0 +1,16 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: I/O Support -- Malformed URL example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<blockquote>
+ <pre>
+ <c:import url="jsp/simpletag/foo.jsp" context="/examples"/>
+ </pre>
+</blockquote>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/import/index.html b/standard-examples/src/main/webapp/import/index.html
new file mode 100644
index 0000000..ca2dec1
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/index.html
@@ -0,0 +1,124 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Import Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Import Tags Examples</h2>
+
+<p>If you are using a Proxy server, you will need to set the following System
+ Properties when starting the VM:</p>
+<pre>
+ http.proxyHost
+ http.proxyPort
+ ftp.proxyHost
+ ftp.proxyPort
+</pre>
+<br>
+
+<h3>Absolute <a href="../ShowSource.jsp?filename=/import/Absolute.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="Absolute.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using an Absolute URL to import a resource. <br>
+
+<h3>Relative <a href="../ShowSource.jsp?filename=/import/Relative.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="Relative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using a Relative URL to import a resource. <br>
+
+<h3>Context Relative <a href="../ShowSource.jsp?filename=/import/ContextRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ContextRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Importing a resource relative to a foreign context. <br>
+
+<h3>Absolute (FTP) <a href="../ShowSource.jsp?filename=/import/AbsoluteFtp.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="AbsoluteFtp.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using an Absolute URL to import a resource using a different protocol other than
+HTTP. <br>
+
+<h3>Encode <a href="../ShowSource.jsp?filename=/import/Encode.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Encode.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+URL encoding examples. <br>
+
+<h3>Encode Context Relative <a href="../ShowSource.jsp?filename=/import/EncodeContextRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="EncodeContextRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+URL encoding examples using a relative context and nested param tags. <br>
+
+<h3>Encode Query String <a href="../ShowSource.jsp?filename=/import/EncodeQueryString.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="EncodeQueryString.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+URL encoding examples using a relative context and query string. <br>
+
+<h3>String Exposure Absolute <a href="../ShowSource.jsp?filename=/import/ExposeString.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ExposeString.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Exposing the content of the resource as a String Object. <br>
+
+<h3>String Exposure Relative <a href="../ShowSource.jsp?filename=/import/ExposeStringRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ExposeStringRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Exposing the content of a relative URL's resource as a String Object. <br>
+
+<h3>Param <a href="../ShowSource.jsp?filename=/import/Param.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Param.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using
+<param>
+element to specify request parameters. Also demonstrating how request
+parameters can be URL encoded (default). (NOTE: Returns error page by default.)
+<br>
+
+<h3>Malformed URL <a href="../ShowSource.jsp?filename=/import/StartSlash.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="StartSlash.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+A relative URL must start with a "/" in a foreign context. (NOTE: This example
+will result in a ServletException describing the error condition). <br>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/import/index.jsp b/standard-examples/src/main/webapp/import/index.jsp
new file mode 100644
index 0000000..77085ed
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/index.jsp
@@ -0,0 +1,99 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Import Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a
+ href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a> • <a href="../functions/index.html"></a><a
+ href="../misc/index.html">Misc.</a></font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<%@ include file="links.html" %>
+<h2>Context Relative Examples</h2>
+
+<p>For the context relative examples you will need to supply an available relative
+ context name and url before executing the tags.</p>
+
+<form name="myform" action="session.jsp" method="get">
+ <table width="90%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>Context</td>
+ <td>
+ <input type="text" size="40" name="contextName" value="/examples">
+ </td>
+ </tr>
+ <tr>
+ <td>Url</td>
+ <td>
+ <input type="text" size="40" name="contextUrl" value="/jsp/simpletag/foo.jsp">
+ </td>
+ </tr>
+ <tr>
+ <td>Param name:</td>
+ <td>
+ <input type="text" size="40" name="paramName1">
+ </td>
+ <td>Param value:</td>
+ <td>
+ <input type="text" size="40" name="paramValue1">
+ </td>
+ </tr>
+ <tr>
+ <td>Param name:</td>
+ <td>
+ <input type="text" size="40" name="paramName2">
+ </td>
+ <td>Param value:</td>
+ <td>
+ <input type="text" size="40" name="paramValue2">
+ </td>
+ </tr>
+ <tr>
+ <td>Param name:</td>
+ <td>
+ <input type="text" size="40" name="paramName3">
+ </td>
+ <td>Param value:</td>
+ <td>
+ <input type="text" size="40" name="paramValue3">
+ </td>
+ </tr>
+ </table>
+ <p>
+ <input type="submit" name="Submit" value="Submit">
+ </p>
+</form>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a
+ href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/import/links.html b/standard-examples/src/main/webapp/import/links.html
new file mode 100644
index 0000000..6c30a1e
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/links.html
@@ -0,0 +1,57 @@
+<h2>Import Tags Examples</h2>
+<p>If you are using a Proxy server, you will need to set the following System
+ Properties when starting the VM:</p>
+<pre>
+ http.proxyHost
+ http.proxyPort
+ ftp.proxyHost
+ ftp.proxyPort
+</pre>
+<br>
+<h3>Absolute <a href="../ShowSource.jsp?filename=/import/Absolute.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="Absolute.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using an Absolute URL to import a resource. <br>
+<h3>Relative <a href="../ShowSource.jsp?filename=/import/Relative.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="Relative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using a Relative URL to import a resource. <br>
+<h3>Absolute (FTP) <a href="../ShowSource.jsp?filename=/import/AbsoluteFtp.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="AbsoluteFtp.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using an Absolute URL to import a resource using a different protocol other than
+HTTP. <br>
+<h3>Encode <a href="../ShowSource.jsp?filename=/import/Encode.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Encode.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+URL encoding examples. <br>
+<h3>String Exposure Absolute <a href="../ShowSource.jsp?filename=/import/ExposeString.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ExposeString.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Exposing the content of the resource as a String Object. <br>
+<h3>String Exposure Relative <a href="../ShowSource.jsp?filename=/import/ExposeStringRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ExposeStringRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Exposing the content of a relative URL's resource as a String Object. <br>
+<h3>Param <a href="../ShowSource.jsp?filename=/import/Param.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Param.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Using <param> element to specify request parameters. Also demonstrating how request
+parameters can be URL encoded (default). (NOTE: Returns error page that shows
+how request parameters are encoded) <br>
+<h3>Malformed URL <a href="../ShowSource.jsp?filename=/import/StartSlash.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="StartSlash.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+A relative URL must start with a "/" in a foreign context. (NOTE: This example
+will result in a ServletException describing the error condition). <br>
diff --git a/standard-examples/src/main/webapp/import/relativeLinks.html b/standard-examples/src/main/webapp/import/relativeLinks.html
new file mode 100644
index 0000000..b8a1a58
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/relativeLinks.html
@@ -0,0 +1,12 @@
+<h2>Import Tags Context Relative Examples</h2>
+
+<h3>Context Relative <a href="../ShowSource.jsp?filename=/import/ContextRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="ContextRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Importing a resource relative to a foreign context. <br>
+<h3>Encode Context Relative <a href="../ShowSource.jsp?filename=/import/EncodeContextRelative.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="EncodeContextRelative.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+URL encoding examples using a relative context and nested param tags. <br>
diff --git a/standard-examples/src/main/webapp/import/session.jsp b/standard-examples/src/main/webapp/import/session.jsp
new file mode 100644
index 0000000..3e85132
--- /dev/null
+++ b/standard-examples/src/main/webapp/import/session.jsp
@@ -0,0 +1,33 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
+
+<html>
+<head>
+ <title>Jakarta DBTAGS Taglib Example</title>
+</head>
+<body bgcolor="white">
+
+<%
+ String _param = request.getParameter("contextName");
+ session.setAttribute("_contextName", _param);
+ _param = request.getParameter("contextUrl");
+ session.setAttribute("_contextUrl", _param);
+
+ _param = request.getParameter("paramValue1");
+ session.setAttribute("_paramValue1", _param);
+ _param = request.getParameter("paramValue2");
+ session.setAttribute("_paramValue2", _param);
+ _param = request.getParameter("paramValue3");
+ session.setAttribute("_paramValue3", _param);
+
+ _param = request.getParameter("paramName1");
+ session.setAttribute("_paramName1", _param);
+ _param = request.getParameter("paramName2");
+ session.setAttribute("_paramName2", _param);
+ _param = request.getParameter("paramName3");
+ session.setAttribute("_paramName3", _param);
+%>
+
+<%@ include file="relativeLinks.html" %>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/index.html b/standard-examples/src/main/webapp/index.html
new file mode 100644
index 0000000..7bc9f74
--- /dev/null
+++ b/standard-examples/src/main/webapp/index.html
@@ -0,0 +1,124 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Examples Web Application</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="index.html">Introduction</a>
+ • <a href="elsupport/index.html">General Purpose</a>
+ • <a href="conditionals/index.html">Conditionals</a>
+ • <a href="iterators/index.html">Iterators</a> •
+ <a href="import/index.jsp">Import</a> • <a href="format/index.html">I18N
+ & Formatting</a> • <a href="xml/index.html">XML</a>
+ • <a href="sql/index.jsp">SQL</a> • <a href="functions/index.html">Functions</a>
+ • <a href="tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Welcome to the standard-examples web application!</h2>
+
+<p>This web application includes a variety of sample JSP pages that showcase the
+ Tomcat Standard tags.
+
+<h3>Examples</h3>
+
+<p>The JSTL examples have been divided in the following categories:</p>
+<ul>
+ <li><a href="elsupport/index.html">General Purpose Tags</a></li>
+ <li><a href="conditionals/index.html">Conditional Tags</a></li>
+ <li><a href="iterators/index.html">Iterator Tags</a></li>
+ <li><a href="import/index.jsp">Import Tags</a></li>
+ <li><a href="format/index.html">I18N & Formatting Tags</a></li>
+ <li><a href="xml/index.html">XML Tags</a></li>
+ <li><a href="sql/index.jsp">SQL Tags</a></li>
+ <li><a href="functions/index.html">Functions</a></li>
+ <li><a href="tlv/index.html">Tag Library Validators</a></li>
+</ul>
+<p>The navigation bar at the top of each index page provides quick navigation
+ to each set of example pages.</p>
+
+<p>When navigating the examples, the following icons will allow you to look at
+ the source code as well as execute the example JSP page.</p>
+<table border="1" align="center" cellpadding="10">
+ <tr>
+ <td width="30"><img src="images/code.gif"></td>
+ <td>Look at the source code of the example JSP page</td>
+ </tr>
+ <tr>
+ <td width="30"><img src="images/execute.gif"></td>
+ <td>Execute the example JSP page</td>
+ </tr>
+</table>
+<h3>Infrastructure</h3>
+
+<p>The source code for the JSTL examples includes class <code>startup.Init</code>
+ to initilialize the objects used in the examples. This allows us to mimic the
+ environment that would normally be used within an MVC architecture: the Controller
+ invokes the business logic, saves the objects required by the web application
+ into JSP scoped attributes (usually request), and then invokes the proper JSP
+ page. For the sake of this "examples" webapp, all objects are saved
+ in the application scope.</p>
+
+<p>The application attributes are:</p>
+<ul>
+ <li><code>customers</code><br>
+ A collection of Customer objects
+ </li>
+ <li><code>intArray</code><br>
+ An array of int's
+ </li>
+ <li><code>stringArray</code><br>
+ An array of Strings
+ </li>
+ <li><code>numberMap</code><br>
+ A Map instance associating Integer objects with their Spanish names
+ </li>
+ <li><code>enumeration</code><br>
+ An enumeration on numberMap from above.<br>
+ </li>
+</ul>
+<p>The classes of interest that hold the information manipulated by the JSP pages
+ are:</p>
+<ul>
+ <li>Customer
+ <ul>
+ <li>int key</li>
+ <li>String lastName</li>
+ <li>String firstName</li>
+ <li>Date birthDate</li>
+ <li>Address address<br>
+ <br>
+ </li>
+ </ul>
+ </li>
+ <li>Address
+ <ul>
+ <li>String line1</li>
+ <li>String line2</li>
+ <li>String city</li>
+ <li>String state</li>
+ <li>String country</li>
+ </ul>
+ </li>
+</ul>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/iterators/BoundaryCases.jsp b/standard-examples/src/main/webapp/iterators/BoundaryCases.jsp
new file mode 100644
index 0000000..807f203
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/BoundaryCases.jsp
@@ -0,0 +1,60 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Miscellaneous -- Various Iterator Tests Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Various tests for Iterator tags</h3>
+
+<h4>Iteration with only end specified (no items): end="10"</h4>
+(illegal)
+<%--
+<c:forEach var="i" end="10">
+ <c:out value="${i}"/> •
+</c:forEach>
+--%>
+
+<h4>Iteration with only begin specified (no items): begin="10"</h4>
+(illegal)
+<%--
+<c:forEach var="i" begin="10">
+ ${i} •
+</c:forEach>
+--%>
+
+<h4>Iteration with only begin specified (with items): begin="2"</h4>
+
+<c:forEach var="i" items="${customers}" begin="2" varStatus="status">
+ index: ${status.index} •
+ count: ${status.count} •
+ item: ${i}<br>
+</c:forEach>
+
+<h4>Iteration with only end specified (with items): end="1"</h4>
+
+<c:forEach var="i" items="${customers}" end="1" varStatus="status">
+ index: ${status.index} •
+ count: ${status.count} •
+ item: ${i}><br>
+</c:forEach>
+
+<h4>Iteration with begin > end</h4>
+<c:catch var="ex">
+ <c:forEach var="i" items="${customers}" begin="3" end="1" varStatus="status">
+ index: ${status.index} •
+ count: ${status.count} •
+ item: ${i}<br>
+ </c:forEach>
+ <c:forTokens var="i" items="one,two,three,four,five" delims="," begin="3" end="1" varStatus="status">
+ index: ${status.index} •
+ count: ${status.count} •
+ item: ${i}<br>
+ </c:forTokens>
+</c:catch>
+<c:if test="${ex != null}">
+ Exception: ${ex}
+</c:if>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/Collaboration.jsp b/standard-examples/src/main/webapp/iterators/Collaboration.jsp
new file mode 100644
index 0000000..1f4eac5
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/Collaboration.jsp
@@ -0,0 +1,44 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support 2-- Collaboration Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Collaboration</h3>
+
+<h4>Without custom tags</h4>
+
+<table>
+ <c:forEach var="customer" items="${customers}" varStatus="status">
+ <tr>
+ <jsp:useBean type="javax.servlet.jsp.jstl.core.LoopTagStatus" id="status"/>
+ <c:choose>
+ <c:when test="<%= status.getCount() % 2 == 1 %>">
+ <td bgcolor="#FFFF66">
+ </c:when>
+ <c:otherwise>
+ <td bgcolor="#99FFCC">
+ </c:otherwise>
+ </c:choose>
+ <c:out value="${customer}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+
+<h4>Using custom tags <even> and <odd></h4>
+
+<table>
+ <c:forEach var="customer" items="${customers}">
+ <tr>
+ <ex:odd>
+ <td bgcolor="#FFFF66"></ex:odd>
+ <ex:even>
+ <td bgcolor="#99FFCC"></ex:even>
+ <c:out value="${customer}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/DataTypes.jsp b/standard-examples/src/main/webapp/iterators/DataTypes.jsp
new file mode 100644
index 0000000..2d47707
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/DataTypes.jsp
@@ -0,0 +1,40 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support -- Data Types Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Data Types</h3>
+
+<h4>Array of primitives (int)</h4>
+
+<c:forEach var="i" items="${intArray}">
+ <c:out value="${i}"/> •
+</c:forEach>
+
+<h4>Array of objects (String)</h4>
+
+<c:forEach var="string" items="${stringArray}">
+ <c:out value="${string}"/><br>
+</c:forEach>
+
+<h4>Enumeration (warning: this only works until enumeration is exhausted!)</h4>
+
+<c:forEach var="item" items="${enumeration}" begin="2" end="10" step="2">
+ <c:out value="${item}"/><br>
+</c:forEach>
+
+<h4>Properties (Map)</h4>
+
+<c:forEach var="prop" items="${numberMap}" begin="1" end="5">
+ <c:out value="${prop.key}"/> = <c:out value="${prop.value}"/><br>
+</c:forEach>
+
+<h4>String (Comma Separated Values)</h4>
+
+<c:forEach var="token" items="bleu,blanc,rouge">
+ <c:out value="${token}"/><br>
+</c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/Extensability.jsp b/standard-examples/src/main/webapp/iterators/Extensability.jsp
new file mode 100644
index 0000000..2646e9b
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/Extensability.jsp
@@ -0,0 +1,51 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+
+<c:set var="first"><c:out value="${param['first']}" default="1"/></c:set>
+<c:set var="pageSize"><c:out value="${param['pageSize']}" default="30"/></c:set>
+<c:set var="last" value="${first+pageSize-1}"/>
+
+<c:if test="${first != 1}">
+ <c:url var="prevURL" value="Extensability.jsp">
+ <c:param name="first" value="${first - pageSize}"/>
+ </c:url>
+</c:if>
+
+<c:url var="nextURL" value="Extensability.jsp">
+ <c:param name="first" value="${last+1}"/>
+</c:url>
+
+<table>
+ <tr>
+ <th>#</th>
+ </th>
+ <th>Code</th>
+ <th colspan="2" align="left">Name</th>
+ </tr>
+ <ex:locales var="locale" varStatus="status" varTotal="total" begin="${first}" end="${last}">
+ <tr>
+ <td><c:out value="${status.index}"/></td>
+ <td><c:out value="${locale}"/></td>
+ <td><c:out value="${locale.displayName}"/></td>
+ <td><ex:defaultLocale><b>(default locale)</b></ex:defaultLocale></td>
+ </tr>
+ </ex:locales>
+</table>
+
+<c:if test="${last > total}">
+ <c:set var="last" value="${total}"/>
+ <c:remove var="nextURL"/>
+</c:if>
+
+<br>
+Showing locales <c:out value="${first}"/> to <c:out value="${last}"/> of <c:out value="${total}"/><br>
+<br>
+<c:if test="${not empty prevURL}">
+ <a href="<c:out value="${prevURL}"/>">previous</a>
+</c:if>
+<c:if test="${not empty nextURL}">
+ <a href="<c:out value="${nextURL}"/>">next</a>
+</c:if>
+<br>
+
diff --git a/standard-examples/src/main/webapp/iterators/ForTokens.jsp b/standard-examples/src/main/webapp/iterators/ForTokens.jsp
new file mode 100644
index 0000000..483a5ca
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/ForTokens.jsp
@@ -0,0 +1,25 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support -- forTokens Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3><forTokens></h3>
+
+<h4>String with '|' delimiter</h4>
+
+<c:forTokens var="token" items="bleu,blanc,rouge|vert,jaune|blanc,rouge"
+ delims="|">
+ <c:out value="${token}"/> •
+</c:forTokens>
+
+<h4>String with '|' and ',' delimiters</h4>
+
+<c:forTokens var="token" items="bleu,blanc,rouge|vert,jaune|blanc,rouge"
+ delims="|,">
+ <c:out value="${token}"/> •
+</c:forTokens>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/Simple.jsp b/standard-examples/src/main/webapp/iterators/Simple.jsp
new file mode 100644
index 0000000..e0f7c76
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/Simple.jsp
@@ -0,0 +1,18 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support -- Simple Iteration Example</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+<h3>Simple Iteration</h3>
+
+<h4>Customer list</h4>
+
+<c:forEach var="customer" items="${customers}">
+ ${customer}<br>
+</c:forEach>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/SimpleRange.jsp b/standard-examples/src/main/webapp/iterators/SimpleRange.jsp
new file mode 100644
index 0000000..066c78b
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/SimpleRange.jsp
@@ -0,0 +1,16 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support -- Simple Range Iteration Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Simple Range Iteration</h3>
+
+<h4>1 to 10</h4>
+
+<c:forEach var="i" begin="1" end="10">
+ ${i} •
+</c:forEach>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/Status.jsp b/standard-examples/src/main/webapp/iterators/Status.jsp
new file mode 100644
index 0000000..5678554
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/Status.jsp
@@ -0,0 +1,54 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Iterator Support -- Iteration Status Example</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Iteration Status</h3>
+
+<h4>Using status information: current, index, count, first, last</h4>
+<table border="1">
+ <tr>
+ <th>index</th>
+ <th>count</th>
+ <th>last name</th>
+ <th>first name</th>
+ <th>first?</th>
+ <th>last?</th>
+ </tr>
+ <c:forEach var="customer" items="${customers}" varStatus="status">
+ <tr>
+ <td><c:out value="${status.index}"/></td>
+ <td><c:out value="${status.count}"/></td>
+ <td><c:out value="${status.current.lastName}"/></td>
+ <td><c:out value="${status.current.firstName}"/></td>
+ <td><c:out value="${status.first}"/></td>
+ <td><c:out value="${status.last}"/></td>
+ </tr>
+ <c:if test="${status.last}">
+ <c:set var="count" value="${status.count}"/>
+ </c:if>
+ </c:forEach>
+</table>
+<p>There are
+ <c:out value="${count}"/> customers in the list.
+
+<p>
+
+<h4>Iteration using range attributes</h4>
+<c:forEach var="i" begin="100" end="200" step="5" varStatus="status">
+ <c:if test="${status.first}">
+ begin:<c:out value="${status.begin}">begin</c:out>
+ end:<c:out value="${status.end}">end</c:out>
+ step:<c:out value="${status.step}">step</c:out><br>
+ sequence:
+ </c:if>
+ <c:out value="${i}"/>
+ <c:if test="${status.last}">
+ <br>There are <c:out value="${status.count}"/> numbers in the list.
+ </c:if>
+</c:forEach>
+<p>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/iterators/index.html b/standard-examples/src/main/webapp/iterators/index.html
new file mode 100644
index 0000000..3b1e5cc
--- /dev/null
+++ b/standard-examples/src/main/webapp/iterators/index.html
@@ -0,0 +1,111 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Iterator Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Iterator Tags Examples</h2>
+
+<h3>Simple <a href="../ShowSource.jsp?filename=/iterators/Simple.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="Simple.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Simply displays the default <code>toString()</code> value of the items in the
+<code>Customers</code> collection.<br>
+
+<h3> Range <a href="../ShowSource.jsp?filename=/iterators/SimpleRange.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="SimpleRange.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>Another simple example. Similar to the previous one, except that in this case
+ there is no collection to iterate over. The <code>items</code> attribute is
+ optional in the <code><forEach></code> tag. When it is not specified,
+ the range attributes must be used to iterate a specific number of times over
+ the tag's body. In this example, we simply iterate over the integer values specified
+ by the range attributes.</p>
+
+<h3>Data Types <a href="../ShowSource.jsp?filename=/iterators/DataTypes.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a> <a
+ href="DataTypes.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>The <code><forEach></code> tag supports a large number of data types
+ for the collection of objects to iterate over. In this example, we feature the
+ following data types: array of primitives, array of objects, Enumeration, Properties
+ (Map), String (Comma Separated Values).</p>
+
+<h3>Iteration Status <a href="../ShowSource.jsp?filename=/iterators/Status.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a> <a
+ href="Status.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>The iterator tag exposes a wealth of information relative to the iteration
+ taking place. This example features some of that status information.</p>
+
+<h3>Collaboration <a href="../ShowSource.jsp?filename=/iterators/Collaboration.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a> <a href="Collaboration.jsp"><img
+ src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>The iterator tags expose interface IteratorTag to allow custom tags to establish
+ implicit collaboration. This example shows two custom tags, <even> and
+ <odd> who take advantage of this implicit collaboration.</p>
+
+<h3><forTokens> <a href="../ShowSource.jsp?filename=/iterators/ForTokens.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a> <a href="ForTokens.jsp"><img
+ src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>The <forEach> tag provides the basic iteration capabilities. <forTokens>
+ is a specialization for the handling of Strings of tokens. Essentially the same
+ as <forEach>, except that it only applies to Strings of tokens and that
+ it has an extra attribute "delims" to specify the token delimiter.</p>
+
+<h3>Extensibility <a href="../ShowSource.jsp?filename=/iterators/Extensability.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a> <a href="Extensability.jsp"><img
+ src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+
+<p>JSTL exposes in its API the abstract class LoopTagSupport to facilitate
+ the implementation of custom iterator tags that leverage the standard iteration
+ behavior defined in JSTL. This example shows a custom iterator tag that shows all Locale objects available in the
+ server and a custom conditional sub-tag that
+ display the default locale.</p>
+
+<h3>Boundary Case Tests <a href="../ShowSource.jsp?filename=/iterators/BoundaryCases.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="../iterators/BoundaryCases.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Failure and minimal value examples.<br>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/sql/DriverSetup.jsp b/standard-examples/src/main/webapp/sql/DriverSetup.jsp
new file mode 100644
index 0000000..3cb4dc6
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/DriverSetup.jsp
@@ -0,0 +1,22 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>SQL Driver Setup Example</h1>
+
+<code>
+<pre>
+<sql:setDataSource
+ var="example"
+ driver="RmiJdbc.RJDriver"
+ url="jdbc:rmi://localhost:1099/jdbc:cloudscape:CloudscapeDB;create=true"
+/>
+</pre>
+</code>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/QueryDirect.jsp b/standard-examples/src/main/webapp/sql/QueryDirect.jsp
new file mode 100644
index 0000000..e5e44dc
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/QueryDirect.jsp
@@ -0,0 +1,89 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>SQL Direct Query Execution</h1>
+
+<p>This example demonstrates how the row and columns can be directly accessed using various direct mechanisms.
+
+<p>
+
+
+ <!-- NOTE: the sql:setDataSource tag is for prototyping and simple applications. You should really use a DataSource object instead --!>
+
+<sql:setDataSource
+ var="example"
+ driver="${sessionScope.myDbDriver}"
+ url="${sessionScope.myDbUrl}"
+ user="${sessionScope.myDbUserName}"
+ password="${sessionScope.myDbPassword}"
+/>
+
+<sql:transaction dataSource="${example}">
+
+ <sql:update var="newTable">
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+ </sql:update>
+
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (1,'Paul Oakenfold')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (2,'Timo Maas')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (3,'Paul van Dyk')
+ </sql:update>
+
+ <sql:query var="deejays">
+ SELECT * FROM mytable
+ </sql:query>
+
+</sql:transaction>
+
+<hr>
+
+<h2>Using the Row index and Column name</h2>
+Row[0].NAMEID: <c:out value="${deejays.rows[0].NAMEID}" />
+<br>
+Row[0].NAME: <c:out value="${deejays.rows[0].NAME}" />
+<br>
+Row[1].NAMEID: <c:out value="${deejays.rows[1].NAMEID}" />
+<br>
+Row[1].NAME: <c:out value="${deejays.rows[1].NAME}" />
+<br>
+Row[2].NAMEID: <c:out value="${deejays.rows[2].NAMEID}" />
+<br>
+Row[2].NAME: <c:out value="${deejays.rows[2].NAME}" />
+<br>
+
+<hr>
+
+<h2>Using the Row and Column index</h2>
+Row[0][0]: <c:out value="${deejays.rowsByIndex[0][0]}" />
+<br>
+Row[0][1]: <c:out value="${deejays.rowsByIndex[0][1]}" />
+<br>
+Row[1][0]: <c:out value="${deejays.rowsByIndex[1][0]}" />
+<br>
+Row[1][1]: <c:out value="${deejays.rowsByIndex[1][1]}" />
+<br>
+Row[2][0]: <c:out value="${deejays.rowsByIndex[2][0]}" />
+<br>
+Row[2][1]: <c:out value="${deejays.rowsByIndex[2][1]}" />
+<br>
+
+<sql:update var="newTable" dataSource="${example}">
+ drop table mytable
+</sql:update>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/QueryIterate.jsp b/standard-examples/src/main/webapp/sql/QueryIterate.jsp
new file mode 100644
index 0000000..7a48e49
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/QueryIterate.jsp
@@ -0,0 +1,104 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>SQL Query Execution using an iterator</h1>
+
+
+<!-- NOTE: the sql:setDataSource tag is for prototyping and simple applications. You should really use a DataSource object instead --!>
+
+<sql:setDataSource
+ var="example"
+ driver="${sessionScope.myDbDriver}"
+ url="${sessionScope.myDbUrl}"
+ user="${sessionScope.myDbUserName}"
+ password="${sessionScope.myDbPassword}"
+/>
+
+<sql:transaction dataSource="${example}">
+
+ <sql:update var="newTable">
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+ </sql:update>
+
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (1,'Paul Oakenfold')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (2,'Timo Maas')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (3,'Paul van Dyk')
+ </sql:update>
+
+
+ <sql:query var="deejays">
+ SELECT * FROM mytable
+ </sql:query>
+
+</sql:transaction>
+
+<hr>
+
+<h2>Iterating over each Row of the result</h2>
+
+<table border="1">
+ <c:forEach var="row" items="${deejays.rowsByIndex}">
+ <tr>
+ <c:forEach var="column" items="${row}">
+ <td><c:out value="${column}"/></td>
+ </c:forEach>
+ </tr>
+ </c:forEach>
+</table>
+
+<hr>
+
+<h2>Iterating over Columns without knowing the index</h2>
+
+<table border="1">
+ <c:forEach var="row" items="${deejays.rows}">
+ <tr>
+ <td>Name: <c:out value="${row.NAMEID}"/></td>
+ <td>Value: <c:out value="${row.NAME}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+
+<hr>
+
+<h2>Putting it all together</h2>
+
+<%-- Easiest example showing how to populate a table --%>
+<table border="1">
+ <tr>
+ <%-- Get the column names for the header of the table --%>
+ <c:forEach var="columnName" items="${deejays.columnNames}">
+ <th><c:out value="${columnName}"/></th>
+ </c:forEach>
+
+ <%-- Get the value of each column while iterating over rows --%>
+ <c:forEach var="row" items="${deejays.rowsByIndex}">
+ <tr>
+ <c:forEach var="column" items="${row}">
+ <td><c:out value="${column}"/></td>
+ </c:forEach>
+ </c:forEach>
+</table>
+
+
+<sql:update var="newTable" dataSource="${example}">
+ drop table mytable
+</sql:update>
+
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/QueryParam.jsp b/standard-examples/src/main/webapp/sql/QueryParam.jsp
new file mode 100644
index 0000000..d868e5b
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/QueryParam.jsp
@@ -0,0 +1,72 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+ <% request.setAttribute("newName", new String("Paul van Dyk")); %>
+
+<h1>SQL Query Execution using parameters</h1>
+
+<p>Using parameter marker's to insert values in the SQL statements</p>
+
+
+<!-- NOTE: the sql:setDataSource tag is for prototyping and simple applications. You should really use a DataSource object instead --!>
+
+<sql:setDataSource
+ var="example"
+ driver="${sessionScope.myDbDriver}"
+ url="${sessionScope.myDbUrl}"
+ user="${sessionScope.myDbUserName}"
+ password="${sessionScope.myDbPassword}"
+/>
+
+<sql:transaction dataSource="${example}">
+
+ <sql:update var="newTable">
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+ </sql:update>
+
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (1,'Paul Oakenfold')
+ </sql:update>
+
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (?,'Timo Maas')
+ <sql:param value="2"/>
+ </sql:update>
+
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (?,?)
+ <sql:param value="3"/>
+ <sql:param value="${newName}"/>
+ </sql:update>
+
+ <sql:query var="deejay">
+ SELECT * FROM mytable
+ </sql:query>
+
+</sql:transaction>
+
+<table border="1">
+ <c:forEach var="row" items="${deejay.rows}">
+ <tr>
+ <td><c:out value="${row.NAMEID}"/></td>
+ <td><c:out value="${row.NAME}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+
+<sql:update var="newTable" dataSource="${example}">
+ drop table mytable
+</sql:update>
+
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/Transaction.jsp b/standard-examples/src/main/webapp/sql/Transaction.jsp
new file mode 100644
index 0000000..95e20c9
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/Transaction.jsp
@@ -0,0 +1,60 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>SQL Transactions</h1>
+
+
+<!-- NOTE: the sql:setDataSource tag is for prototyping and simple applications. You should really use a DataSource object instead --!>
+
+<sql:setDataSource
+ var="example"
+ driver="${sessionScope.myDbDriver}"
+ url="${sessionScope.myDbUrl}"
+ user="${sessionScope.myDbUserName}"
+ password="${sessionScope.myDbPassword}"
+/>
+
+<p>You can group transactions together using the <sql:transaction> tag.</p>
+
+<h2>Creating table using a transaction</h2>
+
+<sql:transaction dataSource="${example}">
+ <sql:update var="newTable">
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+ </sql:update>
+</sql:transaction>
+
+<p>DONE: Creating table using a transaction</p>
+
+<hr>
+
+<h2>Populating table in one transaction</h2>
+
+<sql:transaction dataSource="${example}">
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (1,'Paul Oakenfold')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (2,'Timo Maas')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (3,'Paul van Dyk')
+ </sql:update>
+</sql:transaction>
+
+<p>DONE: Populating table in one transaction</p>
+
+<sql:update var="newTable" dataSource="${example}">
+ drop table mytable
+</sql:update>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/Update.jsp b/standard-examples/src/main/webapp/sql/Update.jsp
new file mode 100644
index 0000000..22eb548
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/Update.jsp
@@ -0,0 +1,115 @@
+<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: SQL action examples</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h1>SQL Update Execution</h1>
+
+
+<!-- NOTE: the sql:setDataSource tag is for prototyping and simple applications. You should really use a DataSource object instead --!>
+
+<sql:setDataSource
+ var="example"
+ driver="${sessionScope.myDbDriver}"
+ url="${sessionScope.myDbUrl}"
+ user="${sessionScope.myDbUserName}"
+ password="${sessionScope.myDbPassword}"
+/>
+
+<hr>
+
+<sql:transaction dataSource="${example}">
+
+ <sql:update var="newTable">
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+ </sql:update>
+
+<h2>Inserting three rows into table</h2>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (1,'Paul Oakenfold')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (2,'Timo Maas')
+ </sql:update>
+ <sql:update var="updateCount">
+ INSERT INTO mytable VALUES (3,'Paul van Dyk')
+ </sql:update>
+
+<p>DONE: Inserting three rows into table</p>
+
+
+ <sql:query var="deejays">
+ SELECT * FROM mytable
+ </sql:query>
+
+</sql:transaction>
+
+<%-- An example showing how to populate a table --%>
+<table border="1">
+ <%-- Get the column names for the header of the table --%>
+ <c:forEach var="columnName" items="${deejays.columnNames}">
+ <th><c:out value="${columnName}"/></th>
+ </c:forEach>
+
+ <%-- Get the value of each column while iterating over rows --%>
+ <c:forEach var="row" items="${deejays.rows}">
+ <tr>
+ <c:forEach var="column" items="${row}">
+ <td><c:out value="${column.value}"/></td>
+ </c:forEach>
+ </tr>
+ </c:forEach>
+</table>
+
+
+<h2>Deleting second row from table</h2>
+
+ <sql:update var="updateCount" dataSource="${example}">
+ DELETE FROM mytable WHERE nameid=2
+ </sql:update>
+
+<p>DONE: Deleting second row from table</p>
+
+<sql:query var="deejays" dataSource="${example}">
+ SELECT * FROM mytable
+</sql:query>
+
+
+<%-- Yet another example showing how to populate a table --%>
+<table border="1">
+ <c:forEach var="row" items="${deejays.rows}" varStatus="status">
+ <%-- Get the column names for the header of the table --%>
+ <c:choose>
+ <c:when test="${status.count == 1}">
+ <%-- Each row is a Map object key'd by the column name --%>
+ <tr>
+ <c:forEach var="metaData" items="${row}">
+ <th><c:out value="${metaData.key}"/></th>
+ </c:forEach>
+ </tr>
+ </c:when>
+ </c:choose>
+ <tr>
+ <c:forEach var="column" items="${row}">
+ <%-- Get the value of each column while iterating over rows --%>
+ <td><c:out value="${column.value}"/></td>
+ </c:forEach>
+ </tr>
+ </c:forEach>
+</table>
+
+
+<sql:update var="newTable" dataSource="${example}">
+ drop table mytable
+</sql:update>
+
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/sql/index.jsp b/standard-examples/src/main/webapp/sql/index.jsp
new file mode 100644
index 0000000..b8bc608
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/index.jsp
@@ -0,0 +1,108 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: SQL Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a
+ href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a> • <a href="../functions/index.html"></a><a
+ href="../misc/index.html">Misc.</a></font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h1>SQL Tags Examples</h1>
+
+<p>These examples create their own table for demonstration purposes. Every database
+ supports table creation in a slightly different way. For instance, different
+ databases have different types and constraints. The simplest possible table
+ was chosen, however it may still not be supported by your particular database.
+ Check your database documentation or administrator if you have problems creating
+ the table and modify the examples acordingly. Here is the table used in the
+ examples:</p>
+<pre><code>
+ create table mytable (
+ nameid int primary key,
+ name varchar(80)
+ )
+</code></pre>
+<p>Enter your Driver Name and DataBase URL to test the Database Tag Library.</p>
+
+<p>NOTE: You will need to have the DataBase Driver classes available to your server's
+ classloader or in your server's CLASSPATH at startup.</p>
+
+<form name="myform" action="session.jsp" method="post">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>Driver:</td>
+ <td>
+ <input type="text" size="40" name="dbDriver" value="org.apache.derby.jdbc.EmbeddedDriver">
+ </td>
+ </tr>
+ <tr>
+ <td>URL:</td>
+ <td>
+ <input type="text" size="40" name="dbUrl"
+ value="jdbc:derby:jstlexample;create=true">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><br>
+
+ <p>The following two fields are <strong>Optional</strong>. They are included
+ for convenience.<br>
+ NOTE: an unsecure <code>form</code> is used.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>User Name:</td>
+ <td>
+ <input type="text" size="40" name="dbUserName" value="">
+ </td>
+ </tr>
+ <tr>
+ <td>Password:</td>
+ <td>
+ <input type="password" size="40" name="dbPassword" value="">
+ </td>
+ </tr>
+ </table>
+ <p>
+ <input type="submit" name="Submit" value="Submit">
+ </p>
+</form>
+<hr>
+<p>NOTE: You can access the tags directly here to look at the source. If you do
+ not provide a valid Driver and URL using the above form, the tags will NOT run properly.</p>
+<%@ include file="links.html" %>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library • </b></font><font color="#003399"><a
+ href="mailto:taglibs-user@jakarta.apache.org"><b>support</b></a>
+ <b><a href="mailto:taglibs-dev@jakarta.apache.org">development</a>
+ <a href="mailto:jsr-52-comments@jcp.org">comments to JSR-52</a></b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/sql/links.html b/standard-examples/src/main/webapp/sql/links.html
new file mode 100644
index 0000000..c7fd4c2
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/links.html
@@ -0,0 +1,43 @@
+<h2>DataBase Tags Examples</h2>
+
+<h3>Query Iterate <a href="../ShowSource.jsp?filename=/sql/QueryIterate.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../sql/QueryIterate.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Example showing how to iterate over the result of a query.<br>
+
+<h3>Update <a href="../ShowSource.jsp?filename=/sql/Update.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="../sql/Update.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Example showing several database updates.<br>
+
+<h3>Direct Query <a href="../ShowSource.jsp?filename=/sql/QueryDirect.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../sql/QueryDirect.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Example showing how the the result of a query can be directly accessed.<br>
+
+<h3>Query Parameters <a href="../ShowSource.jsp?filename=/sql/QueryParam.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../sql/QueryParam.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Example showing how query parameters can be used to create an SQL query.<br>
+
+<h3>Transaction <a href="../ShowSource.jsp?filename=/sql/Transaction.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../sql/Transaction.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Example showing how to setup transactions.<br>
+
+<h3>Driver Setup <a href="../ShowSource.jsp?filename=/sql/DriverSetup.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../sql/DriverSetup.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+A sample page showing how a driver can be configured. NOTE: this is meant for prototyping and simple applications.<br>
+
diff --git a/standard-examples/src/main/webapp/sql/session.jsp b/standard-examples/src/main/webapp/sql/session.jsp
new file mode 100644
index 0000000..7afd78a
--- /dev/null
+++ b/standard-examples/src/main/webapp/sql/session.jsp
@@ -0,0 +1,17 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>Jakarta DBTAGS Taglib Example</title>
+</head>
+<body bgcolor="white">
+
+<c:set var="myDbUrl" value="${param.dbUrl}" scope="session"/>
+<c:set var="myDbDriver" value="${param.dbDriver}" scope="session"/>
+<c:set var="myDbUserName" value="${param.dbUserName}" scope="session"/>
+<c:set var="myDbPassword" value="${param.dbPassword}" scope="session"/>
+
+<%@ include file="links.html" %>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/tlv/PermittedTaglibsError.jsp b/standard-examples/src/main/webapp/tlv/PermittedTaglibsError.jsp
new file mode 100644
index 0000000..f136227
--- /dev/null
+++ b/standard-examples/src/main/webapp/tlv/PermittedTaglibsError.jsp
@@ -0,0 +1,28 @@
+<%@ taglib prefix="permittedTaglibs" uri="http://jakarta.apache.org/taglibs/standard/permittedTaglibs" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL: Tag Library Validator -- PermittedTaglibs Error</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>This JSP page uses taglibs that are not permitted. A translation error will occur.</h3>
+
+<h4>Using custom tags <even> and <odd></h4>
+
+<table>
+ <c:forEach var="customer" items="${customers}">
+ <tr>
+ <ex:odd>
+ <td bgcolor="#FFFF66"></ex:odd>
+ <ex:even>
+ <td bgcolor="#99FFCC"></ex:even>
+ <c:out value="${customer}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/tlv/PermittedTaglibsOk.jsp b/standard-examples/src/main/webapp/tlv/PermittedTaglibsOk.jsp
new file mode 100644
index 0000000..0610f27
--- /dev/null
+++ b/standard-examples/src/main/webapp/tlv/PermittedTaglibsOk.jsp
@@ -0,0 +1,30 @@
+<%@ taglib prefix="permittedTaglibs" uri="http://jakarta.apache.org/taglibs/standard/permittedTaglibs" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<html>
+<head>
+ <title>JSTL: Tag Library Validator -- ScriptFree OK</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>This JSP page only uses permitted taglibs (which in this case are the JSTL taglibs)</h3>
+
+<table>
+ <c:forEach var="customer" items="${customers}" varStatus="status">
+ <tr>
+ <jsp:useBean type="javax.servlet.jsp.jstl.core.LoopTagStatus" id="status"/>
+ <c:choose>
+ <c:when test="${status.count % 2 == 1}">
+ <td bgcolor="#FFFF66">
+ </c:when>
+ <c:otherwise>
+ <td bgcolor="#99FFCC">
+ </c:otherwise>
+ </c:choose>
+ <c:out value="${customer}"/></td>
+ </tr>
+ </c:forEach>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/tlv/ScriptFreeError.jsp b/standard-examples/src/main/webapp/tlv/ScriptFreeError.jsp
new file mode 100644
index 0000000..17d6fd7
--- /dev/null
+++ b/standard-examples/src/main/webapp/tlv/ScriptFreeError.jsp
@@ -0,0 +1,15 @@
+<%@ taglib prefix="scriptfree" uri="http://jakarta.apache.org/taglibs/standard/scriptfree" %>
+<html>
+<head>
+ <title>JSTL: Tag Library Validator -- ScriptFree Error</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>This JSP page is NOT free of scripting elements. Translation error will occur.</h3>
+
+<% java.util.Date date = new java.util.Date(); %>
+
+Date is: <%= date %>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/tlv/ScriptFreeOk.jsp b/standard-examples/src/main/webapp/tlv/ScriptFreeOk.jsp
new file mode 100644
index 0000000..94d0a6f
--- /dev/null
+++ b/standard-examples/src/main/webapp/tlv/ScriptFreeOk.jsp
@@ -0,0 +1,25 @@
+<%@ taglib prefix="scriptfree" uri="http://jakarta.apache.org/taglibs/standard/scriptfree" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<html>
+<head>
+ <title>JSTL: Tag Library Validator -- ScriptFree OK</title>
+</head>
+<body bgcolor="#FFFFFF">
+
+<h3>This JSP page is free of scripting elements</h3>
+
+<table border="1">
+ <c:forEach var="customer" items="${customers}">
+ <tr>
+ <td><c:out value="${customer.lastName}"/></td>
+ <td><c:out value="${customer.phoneHome}" default="no home phone specified"/></td>
+ <td>
+ <c:out value="${customer.phoneCell}" escapeXml="false">
+ <font color="red">no cell phone specified</font>
+ </c:out>
+ </td>
+ </tr>
+ </c:forEach>
+</table>
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/tlv/index.html b/standard-examples/src/main/webapp/tlv/index.html
new file mode 100644
index 0000000..39f828a
--- /dev/null
+++ b/standard-examples/src/main/webapp/tlv/index.html
@@ -0,0 +1,78 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: Tag Library Validators Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="../xml/index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>Tag Library Validators Examples</h2>
+
+<h3>ScriptFree OK <a href="../ShowSource.jsp?filename=/tlv/ScriptFreeOk.jsp"><img src="../images/code.gif"
+ width="24" height="24"
+ border="0"></a>
+ <a href="../tlv/ScriptFreeOk.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>This example shows a JSP page using the ScriptFree TLV. Because this page does
+ not use any scripting element, there are no translation errors and the page
+ is properly processed.</p>
+
+<h3>ScriptFree Error <a href="../ShowSource.jsp?filename=/tlv/ScriptFreeError.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="../tlv/ScriptFreeError.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>This example shows a JSP page using the ScriptFree TLV. Because this page uses
+ scripting elements, a translation error is reported when accessing the page.</p>
+
+<h3>PermittedTaglibs OK <a href="../ShowSource.jsp?filename=/tlv/PermittedTaglibsOk.jsp"><img
+ src="../images/code.gif" width="24" height="24" border="0"></a>
+ <a href="../tlv/PermittedTaglibsOk.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>This example shows a JSP page using the PermittedTaglibs TLV. Because this
+ page only uses permitted tag libraries, there are no translation errors and
+ the page is properly processed.</p>
+
+<h3></h3>
+
+<h3>PermittedTaglibs Error <a
+ href="../ShowSource.jsp?filename=/tlv/PermittedTaglibsError.jsp"><img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="../tlv/PermittedTaglibsError.jsp"><img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+
+<p>This example shows a JSP page using the PermittedTaglibs TLV. Because this
+ page uses tag libraries that are not allowed, a translation error is reported
+ when accessing the page.</p>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
diff --git a/standard-examples/src/main/webapp/xml/Filter.jsp b/standard-examples/src/main/webapp/xml/Filter.jsp
new file mode 100644
index 0000000..9dea840
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/Filter.jsp
@@ -0,0 +1,33 @@
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+<%@ taglib prefix="ex" uri="/jstl-examples-taglib" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / Filter / Out</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / Filter / Out</h3>
+
+<ex:SPath var="spath" select="//a"/>
+<x:parse var="a" filter="${spath}">
+ <nope>
+ <a>
+ <b>
+ <c>
+ foo
+ </c>
+ </b>
+ <d>
+ bar
+ </d>
+ </a>
+ </nope>
+</x:parse>
+
+<x:out select="$a//c"/>
+<x:out select="$a/a/d"/>
+
+<hr/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/ForEach.jsp b/standard-examples/src/main/webapp/xml/ForEach.jsp
new file mode 100644
index 0000000..7cb1d29
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/ForEach.jsp
@@ -0,0 +1,85 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / ForEach</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h3><x:parse> / <x:forEach></h3>
+
+<c:import var="docString" url="ForEachDoc.xml"/>
+
+<x:parse var="document" doc="${docString}"/>
+
+<table border=1>
+ <tr>
+ <td valign="top">
+ <pre><c:out value="${docString}"/></pre>
+ </td>
+ <td valign="top">
+ <table border=1>
+ <tr>
+ <th>Expression</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><pre>
+<x:forEach select="$document//a" varStatus="status">
+ ${status.index}: <x:out select="."/> <br>
+<x:forEach>
+</pre>
+ </td>
+ <td>
+ <x:forEach select="$document//a" varStatus="status">
+ ${status.index}: <x:out select="."/>
+ <br/>
+ </x:forEach>
+ </td>
+ </tr>
+
+ <tr>
+ <td><pre>
+<x:forEach select="$document//a" begin="1" end="2" varStatus="status">
+ -> <x:out select="."/> <br>
+<x:forEach>
+</pre>
+ </td>
+ <td>
+ <x:forEach select="$document//a" begin="1" end="2" varStatus="status">
+ ${status.index}: <x:out select="."/>
+ <br/>
+ </x:forEach>
+ </td>
+ </tr>
+
+ <tr>
+ <td><pre>
+<x:forEach select="$document//a" varStatus="status">
+ ${status.index}:
+ <x:if select=".//d">
+ <d> element present
+ <x:if>
+ <br>
+<x:forEach>
+</pre>
+ </td>
+ <td>
+ <x:forEach select="$document//a" varStatus="status">
+ ${status.index}:
+ <x:if select=".//d">
+ <d> element present
+ </x:if>
+ <br/>
+ </x:forEach>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/ForEachDoc.xml b/standard-examples/src/main/webapp/xml/ForEachDoc.xml
new file mode 100644
index 0000000..30ccb72
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/ForEachDoc.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<doc>
+ <a>
+ <b foo="foo">foo 1</b>
+ </a>
+ <a>
+ <c foo="bar">bar 2</c>
+ </a>
+ <a>
+ <d foo="bar">bar 3</d>
+ </a>
+ <a>
+ <d foo="foo">foo 4</d>
+ </a>
+</doc>
\ No newline at end of file
diff --git a/standard-examples/src/main/webapp/xml/If.jsp b/standard-examples/src/main/webapp/xml/If.jsp
new file mode 100644
index 0000000..bd5ede3
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/If.jsp
@@ -0,0 +1,42 @@
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / If</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / If</h3>
+
+<x:parse var="a">
+ <a>
+ <b>
+ <c>
+ foo
+ </c>
+ </b>
+ <d>
+ bar
+ </d>
+ </a>
+</x:parse>
+
+<x:if select="$a//c">
+ $a//c exists
+</x:if>
+
+<br/>
+
+<x:if select="$a/a/d">
+ $a/a/d exists
+</x:if>
+
+<br/>
+
+<x:if select="$a/w/o/l">
+ $a/w/o/l exists
+</x:if>
+
+<hr/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/Out.jsp b/standard-examples/src/main/webapp/xml/Out.jsp
new file mode 100644
index 0000000..3f25c62
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/Out.jsp
@@ -0,0 +1,82 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / Out</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h3><x:parse> / <x:out></h3>
+
+<c:import var="docString" url="games.xml"/>
+
+<x:parse var="doc" doc="${docString}"/>
+
+<table border=1>
+ <tr>
+ <td valign="top">
+ <pre><c:out value="${docString}"/></pre>
+ </td>
+ <td valign="top">
+ <table border=1>
+ <tr>
+ <th>Expression</th>
+ <th>Result</th>
+ </tr>
+ <%--
+ <tr>
+ <td>3 + 3</td>
+ <td><pre><x:out select="3 + 3"/></pre></td>
+ </tr>
+ --%>
+ <tr>
+ <td>$doc//sport</td>
+ <td>
+ <pre><x:out select="$doc//sport"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc/games/country/*</td>
+ <td>
+ <pre><x:out select="$doc/games/country/*"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc//*</td>
+ <td>
+ <pre><x:out select="$doc//*"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc/games/country</td>
+ <td>
+ <pre><x:out select="$doc/games/country"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc/games/country[last()]</td>
+ <td>
+ <pre><x:out select="$doc/games/country[last()]"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc//@id</td>
+ <td>
+ <pre><x:out select="$doc//@id"/></pre>
+ </td>
+ </tr>
+ <tr>
+ <td>$doc//country[@id='Denmark']</td>
+ <td>
+ <pre><x:out select="$doc//country[@id='Denmark']"/></pre>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/Parse.jsp b/standard-examples/src/main/webapp/xml/Parse.jsp
new file mode 100644
index 0000000..0976ce2
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/Parse.jsp
@@ -0,0 +1,30 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse from Objects and URLs</h3>
+
+<c:set var="xmlText">
+ <a>
+ <b>
+ <c>
+ foo
+ </c>
+ </b>
+ <d>
+ bar
+ </d>
+ </a>
+</c:set>
+
+<x:parse var="a" doc="${xmlText}"/>
+
+<x:out select="$a//c"/>
+<x:out select="$a/a/d"/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/ParseWithEntities.jsp b/standard-examples/src/main/webapp/xml/ParseWithEntities.jsp
new file mode 100644
index 0000000..9b24fc8
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/ParseWithEntities.jsp
@@ -0,0 +1,27 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse from Objects and URLs</h3>
+
+<c:set var="xmlText">
+ <?xml version="1.0"?>
+
+ <!DOCTYPE project [
+ <!ENTITY included SYSTEM "included.xml">
+ ]>
+ <root>
+ &included;
+ </root>
+</c:set>
+
+<x:parse var="a" doc="${xmlText}" systemId="foo.xml"/>
+
+<x:out select="$a//*"/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/Set.jsp b/standard-examples/src/main/webapp/xml/Set.jsp
new file mode 100644
index 0000000..84f6a51
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/Set.jsp
@@ -0,0 +1,31 @@
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / Set / Out</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / Set / Out</h3>
+
+<x:parse var="a">
+ <a>
+ <b>
+ <c>
+ foo
+ </c>
+ </b>
+ <d>
+ <e>
+ bar
+ </e>
+ </d>
+ </a>
+</x:parse>
+
+<x:set var="d" select="$a//d"/>
+<x:out select="$d/e"/>
+
+<hr/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/Transform.jsp b/standard-examples/src/main/webapp/xml/Transform.jsp
new file mode 100644
index 0000000..e074e9a
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/Transform.jsp
@@ -0,0 +1,58 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Transform</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / Expr</h3>
+
+<c:set var="xml">
+ <a><b>header!</b></a>
+</c:set>
+
+<c:set var="xsl">
+ <?xml version="1.0"?>
+ <xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="text()">
+ <h1><xsl:value-of select="."/></h1>
+ </xsl:template>
+
+ </xsl:stylesheet>
+</c:set>
+
+Prints "header" as a header:<br/>
+<x:transform doc="${xml}" xslt="${xsl}"/>
+
+<hr/>
+
+Prints "header" in normal size:<br/>
+<x:transform doc="${xml}" xslt="${xsl}" var="doc"/>
+<x:out select="$doc//h1"/>
+
+<hr size="5"/>
+
+<hr/>
+<h3>Transformations using output from XPath expressions</h3>
+
+<x:parse var="xml" doc="${xml}"/>
+<x:set var="miniDoc" select="$xml//b"/>
+<x:transform xslt="${xsl}" doc="${miniDoc}"/>
+<hr/>
+
+<h3>Inline transformations</h3>
+
+<x:transform xslt="${xsl}">
+ <a>
+ <b>
+ <c>Paragraph one!</c>
+ <c>Paragraph foo!</c>
+ </b>
+ </a>
+</x:transform>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/TransformWithInclusion.jsp b/standard-examples/src/main/webapp/xml/TransformWithInclusion.jsp
new file mode 100644
index 0000000..e3b6064
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/TransformWithInclusion.jsp
@@ -0,0 +1,32 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Transform</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / Expr</h3>
+
+<c:set var="xml">
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+<!ENTITY included SYSTEM "included.xml">
+]>
+<root>
+ &included;
+</root>
+</c:set>
+
+<c:set var="xsl">
+<?xml version="1.0"?>
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="/xml/includedStylesheet.xsl"/>
+
+</xsl:stylesheet>
+</c:set>
+
+<x:transform doc="${xml}" docSystemId="foo.xml" xslt="${xsl}"/>
diff --git a/standard-examples/src/main/webapp/xml/When.jsp b/standard-examples/src/main/webapp/xml/When.jsp
new file mode 100644
index 0000000..be312c7
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/When.jsp
@@ -0,0 +1,68 @@
+<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
+
+<html>
+<head>
+ <title>JSTL: XML Support -- Parse / When</title>
+</head>
+<body bgcolor="#FFFFFF">
+<h3>Parse / When</h3>
+
+<x:parse var="a">
+ <a>
+ <b>
+ <c foo="bar">
+ foo
+ </c>
+ </b>
+ <d>
+ bar
+ </d>
+ </a>
+</x:parse>
+
+<x:choose>
+ <x:when select='$a//c[@foo="bar"]'>
+ @foo = bar
+ </x:when>
+ <x:when select='$a//c[@foo="foo"]'>
+ @foo = foo
+ </x:when>
+ <x:otherwise>
+ @foo not recognized
+ </x:otherwise>
+</x:choose>
+
+<br/>
+
+<x:choose>
+ <x:when select='$a//c[@foo="foo"]'>
+ @foo = foo
+ </x:when>
+ <x:when select='$a//c[@foo="bar"]'>
+ @foo = bar
+ </x:when>
+ <x:otherwise>
+ @foo not recognized
+ </x:otherwise>
+</x:choose>
+
+<br/>
+
+<x:choose>
+ <x:when select='$a//c[@foo="barr"]'>
+ @foo = barr
+ </x:when>
+ <x:when select='$a//c[@foo="fooo"]'>
+ @foo = fooo
+ </x:when>
+ <x:otherwise>
+ @foo not recognized
+ </x:otherwise>
+</x:choose>
+
+<br/>
+
+<hr/>
+
+</body>
+</html>
diff --git a/standard-examples/src/main/webapp/xml/games.xml b/standard-examples/src/main/webapp/xml/games.xml
new file mode 100644
index 0000000..e528b69
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/games.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<games>
+ <country id="Luxembourg">
+ <athlete>
+ <name>Lux 1</name>
+ <sport>swimming</sport>
+ <age>23</age>
+ <gender>M</gender>
+ </athlete>
+ <athlete>
+ <name>Lux 2</name>
+ <sport>wrestling</sport>
+ <age>31</age>
+ <gender>M</gender>
+ </athlete>
+ </country>
+ <country id="Denmark">
+ <athlete>
+ <name>Den 1</name>
+ <sport>cycling</sport>
+ <age>18</age>
+ <gender>F</gender>
+ </athlete>
+ <athlete>
+ <name>Den 2</name>
+ <sport>sailing</sport>
+ <age>27</age>
+ <gender>M</gender>
+ </athlete>
+ </country>
+</games>
\ No newline at end of file
diff --git a/standard-examples/src/main/webapp/xml/included.xml b/standard-examples/src/main/webapp/xml/included.xml
new file mode 100644
index 0000000..5724290
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/included.xml
@@ -0,0 +1,3 @@
+<a>
+ <b>YES!</b>
+</a>
diff --git a/standard-examples/src/main/webapp/xml/includedStylesheet.xsl b/standard-examples/src/main/webapp/xml/includedStylesheet.xsl
new file mode 100644
index 0000000..ff71c51
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/includedStylesheet.xsl
@@ -0,0 +1,10 @@
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:template match="text()">
+ <h1>
+ <xsl:value-of select="."/>
+ </h1>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/standard-examples/src/main/webapp/xml/index.html b/standard-examples/src/main/webapp/xml/index.html
new file mode 100644
index 0000000..d6aaa0d
--- /dev/null
+++ b/standard-examples/src/main/webapp/xml/index.html
@@ -0,0 +1,93 @@
+<html><!-- #BeginTemplate "/Templates/ExamplesTemplate.dwt" -->
+<head>
+ <!-- #BeginEditable "doctitle" -->
+ <title>JSTL: XML Tags Examples</title>
+ <!-- #EndEditable -->
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <link rel="stylesheet" href="../global.css" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="0"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#CCCCFF"><font size="-1">Examples <a href="../index.html">Introduction</a>
+ • <a href="../elsupport/index.html">General Purpose</a>
+ • <a href="../conditionals/index.html">Conditionals</a>
+ • <a href="../iterators/index.html">Iterators</a> •
+ <a href="../import/index.jsp">Import</a> • <a href="../format/index.html">I18N
+ & Formatting</a> • <a href="index.html">XML</a>
+ • <a href="../sql/index.jsp">SQL</a> • <a href="../functions/index.html">Functions</a>
+ • <a href="../tlv/index.html">TLV</a>
+ </font></td>
+ </tr>
+</table>
+<!-- #BeginEditable "body" -->
+<h2>XML Examples</h2>
+
+<h3>Out <a href="../ShowSource.jsp?filename=/xml/Out.jsp"> <img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Out.jsp"> <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Retrieving a String from a parsed XML document <br/>
+
+<h3>Filter <a href="../ShowSource.jsp?filename=/xml/Filter.jsp">
+ <img src="../images/code.gif" width="24" height="24" border="0"></a> <a href="Filter.jsp">
+ <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Applying a SAX XMLFilter object to a document before parsing <br/>
+
+<h3>ForEach <a href="../ShowSource.jsp?filename=/xml/ForEach.jsp">
+ <img src="../images/code.gif" width="24" height="24" border="0"></a> <a href="ForEach.jsp">
+ <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Iterating over XML nodes <br/>
+
+<h3>If <a href="../ShowSource.jsp?filename=/xml/If.jsp"> <img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="If.jsp"> <img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Basing a decision on the status of an XML document <br/>
+
+<h3>Parse <a href="../ShowSource.jsp?filename=/xml/Parse.jsp"> <img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Parse.jsp"> <img src="../images/execute.gif" width="24" height="24"
+ border="0"></a></h3>
+Parsing XML documents directly from Objects and from URLs. <br/>
+
+<h3>Set <a href="../ShowSource.jsp?filename=/xml/Set.jsp"> <img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="Set.jsp"> <img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Storing an object resulting from an XPath expression <br/>
+
+<h3>Transform <a href="../ShowSource.jsp?filename=/xml/Transform.jsp">
+ <img src="../images/code.gif" width="24" height="24" border="0"></a> <a href="Transform.jsp">
+ <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Applying XSLT transformations <br/>
+
+<h3>When <a href="../ShowSource.jsp?filename=/xml/When.jsp"> <img src="../images/code.gif" width="24"
+ height="24" border="0"></a>
+ <a href="When.jsp"> <img src="../images/execute.gif" width="24" height="24" border="0"></a>
+</h3>
+Mutually exclusive conditionals based on the status of an XML document <br/>
+
+<h3>Parse with entities <a href="../ShowSource.jsp?filename=/xml/ParseWithEntities.jsp">
+ <img src="../images/code.gif" width="24" height="24" border="0"></a> <a href="ParseWithEntities.jsp">
+ <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Parsing a document with relative entity references (using systemId) <br/>
+
+<h3>Transform with inclusion <a href="../ShowSource.jsp?filename=/xml/TransformWithInclusion.jsp">
+ <img src="../images/code.gif" width="24" height="24" border="0"></a> <a href="TransformWithInclusion.jsp">
+ <img src="../images/execute.gif" width="24" height="24" border="0"></a></h3>
+Transformations using XSLT tags like <xsl:include> (with xsltSystemId) <br/>
+<!-- #EndEditable -->
+<hr noshade color="#000099">
+<table width="100%" border="0" cellpadding="5">
+ <tr>
+ <td height="24"><font color="#000099"><b>standard taglib • implementation
+ of the JSP Standard Tag Library</b></font></td>
+ </tr>
+</table>
+</body>
+<!-- #EndTemplate --></html>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org