Add missing tags and TLDs to standard-compat jar
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/core/RedirectTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/core/RedirectTag.java
index e30bc96..9808d36 100644
--- a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/core/RedirectTag.java
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/core/RedirectTag.java
@@ -52,7 +52,7 @@
urlExpression = ExpressionUtil.createValueExpression(pageContext, url, String.class);
}
- public void setContextExpression(String context) {
+ public void setContext(String context) {
contextExpression = ExpressionUtil.createValueExpression(pageContext, context, String.class);
}
}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/BundleTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/BundleTag.java
new file mode 100644
index 0000000..0c0a730
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/BundleTag.java
@@ -0,0 +1,56 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.BundleSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <bundle>} using the container's EL implementation.
+ */
+public class BundleTag extends BundleSupport {
+
+ private ValueExpression basenameExpression;
+ private ValueExpression prefixExpression;
+
+ public int doStartTag() throws JspException {
+ basename = ExpressionUtil.evaluate(basenameExpression, pageContext);
+ prefix = ExpressionUtil.evaluate(prefixExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ public void release() {
+ super.release();
+
+ basenameExpression = null;
+ prefixExpression = null;
+ }
+
+
+ public void setBasename(String expression) {
+ basenameExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPrefix(String expression) {
+ prefixExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatDateTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatDateTag.java
new file mode 100644
index 0000000..cb775f7
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatDateTag.java
@@ -0,0 +1,86 @@
+/*
+ * 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.tag.compat.fmt;
+
+import java.util.Date;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.FormatDateSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <formatDate>} using the container's EL implementation.
+ */
+public class FormatDateTag extends FormatDateSupport {
+
+ private ValueExpression valueExpression;
+ private ValueExpression typeExpression;
+ private ValueExpression dateStyleExpression;
+ private ValueExpression timeStyleExpression;
+ private ValueExpression patternExpression;
+ private ValueExpression timeZoneExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ type = ExpressionUtil.evaluate(typeExpression, pageContext);
+ dateStyle = ExpressionUtil.evaluate(dateStyleExpression, pageContext);
+ timeStyle = ExpressionUtil.evaluate(timeStyleExpression, pageContext);
+ pattern = ExpressionUtil.evaluate(patternExpression, pageContext);
+ timeZone = ExpressionUtil.evaluate(timeZoneExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+ valueExpression = null;
+ typeExpression = null;
+ dateStyleExpression = null;
+ timeStyleExpression = null;
+ patternExpression = null;
+ timeZoneExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Date.class);
+ }
+
+ public void setType(String expression) {
+ typeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setDateStyle(String expression) {
+ dateStyleExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setTimeStyle(String expression) {
+ timeStyleExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPattern(String expression) {
+ patternExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setTimeZone(String expression) {
+ timeZoneExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatNumberTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatNumberTag.java
new file mode 100644
index 0000000..0e73549
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/FormatNumberTag.java
@@ -0,0 +1,119 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.FormatNumberSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <formatNumber>} using the container's EL implementation.
+ */
+public class FormatNumberTag extends FormatNumberSupport {
+
+ private ValueExpression valueExpression;
+ private ValueExpression typeExpression;
+ private ValueExpression patternExpression;
+ private ValueExpression currencyCodeExpression;
+ private ValueExpression currencySymbolExpression;
+ private ValueExpression groupingUsedExpression;
+ private ValueExpression maxIntegerDigitsExpression;
+ private ValueExpression minIntegerDigitsExpression;
+ private ValueExpression maxFractionDigitsExpression;
+ private ValueExpression minFractionDigitsExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ type = ExpressionUtil.evaluate(typeExpression, pageContext);
+ pattern = ExpressionUtil.evaluate(patternExpression, pageContext);
+ currencyCode = ExpressionUtil.evaluate(currencyCodeExpression, pageContext);
+ currencySymbol = ExpressionUtil.evaluate(currencySymbolExpression, pageContext);
+ isGroupingUsed = ExpressionUtil.evaluate(groupingUsedExpression, pageContext, false);
+ maxIntegerDigits = ExpressionUtil.evaluate(maxIntegerDigitsExpression, pageContext, 0);
+ minIntegerDigits = ExpressionUtil.evaluate(minIntegerDigitsExpression, pageContext, 0);
+ maxFractionDigits = ExpressionUtil.evaluate(maxFractionDigitsExpression, pageContext, 0);
+ minFractionDigits = ExpressionUtil.evaluate(minFractionDigitsExpression, pageContext, 0);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ valueExpression = null;
+ typeExpression = null;
+ patternExpression = null;
+ currencyCodeExpression = null;
+ currencySymbolExpression = null;
+ groupingUsedExpression = null;
+ maxIntegerDigitsExpression = null;
+ minIntegerDigitsExpression = null;
+ maxFractionDigitsExpression = null;
+ minFractionDigitsExpression = null;
+
+ super.release();
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ valueSpecified = true;
+ }
+
+ public void setType(String expression) {
+ typeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPattern(String expression) {
+ patternExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setCurrencyCode(String expression) {
+ currencyCodeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setCurrencySymbol(String expression) {
+ currencySymbolExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setGroupingUsed(String expression) {
+ groupingUsedExpression = ExpressionUtil.createValueExpression(pageContext, expression, Boolean.class);
+ groupingUsedSpecified = true;
+ }
+
+ public void setMaxIntegerDigits(String expression) {
+ maxIntegerDigitsExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ maxIntegerDigitsSpecified = true;
+ }
+
+ public void setMinIntegerDigits(String expression) {
+ minIntegerDigitsExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ minIntegerDigitsSpecified = true;
+ }
+
+ public void setMaxFactionDigits(String expression) {
+ maxFractionDigitsExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ maxFractionDigitsSpecified = true;
+ }
+
+ public void setMinFractionDigits(String expression) {
+ minFractionDigitsExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ minFractionDigitsSpecified = true;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/MessageTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/MessageTag.java
new file mode 100644
index 0000000..f6e785b
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/MessageTag.java
@@ -0,0 +1,60 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.jstl.fmt.LocalizationContext;
+
+import org.apache.taglibs.standard.tag.common.fmt.MessageSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <message>} using the container's EL implementation.
+ */
+public class MessageTag extends MessageSupport {
+
+ private ValueExpression keyExpression;
+ private ValueExpression bundleExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ keyAttrValue = ExpressionUtil.evaluate(keyExpression, pageContext);
+ bundleAttrValue = ExpressionUtil.evaluate(bundleExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ keyExpression = null;
+ bundleExpression = null;
+ }
+
+ public void setKey(String expression) {
+ keyExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ keySpecified = true;
+ }
+
+ public void setBundle(String expression) {
+ bundleExpression = ExpressionUtil.createValueExpression(pageContext, expression, LocalizationContext.class);
+ bundleSpecified = true;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParamTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParamTag.java
new file mode 100644
index 0000000..f365622
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParamTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.ParamSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class ParamTag extends ParamSupport {
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ valueSpecified = true;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseDateTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseDateTag.java
new file mode 100644
index 0000000..49e81f9
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseDateTag.java
@@ -0,0 +1,96 @@
+/*
+ * 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.tag.compat.fmt;
+
+import java.util.Date;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.LocaleUtil;
+import org.apache.taglibs.standard.tag.common.fmt.ParseDateSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <parseDate>} using the container's EL implementation.
+ */
+public class ParseDateTag extends ParseDateSupport {
+
+ private ValueExpression valueExpression;
+ private ValueExpression typeExpression;
+ private ValueExpression dateStyleExpression;
+ private ValueExpression timeStyleExpression;
+ private ValueExpression patternExpression;
+ private ValueExpression timeZoneExpression;
+ private ValueExpression parseLocaleExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ type = ExpressionUtil.evaluate(typeExpression, pageContext);
+ dateStyle = ExpressionUtil.evaluate(dateStyleExpression, pageContext);
+ timeStyle = ExpressionUtil.evaluate(timeStyleExpression, pageContext);
+ pattern = ExpressionUtil.evaluate(patternExpression, pageContext);
+ timeZone = ExpressionUtil.evaluate(timeZoneExpression, pageContext);
+ parseLocale = LocaleUtil.parseLocaleAttributeValue(
+ ExpressionUtil.evaluate(parseLocaleExpression, pageContext));
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+ valueExpression = null;
+ typeExpression = null;
+ dateStyleExpression = null;
+ timeStyleExpression = null;
+ patternExpression = null;
+ timeZoneExpression = null;
+ parseLocaleExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ valueSpecified = true;
+ }
+
+ public void setType(String expression) {
+ typeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setDateStyle(String expression) {
+ dateStyleExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setTimeStyle(String expression) {
+ timeStyleExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPattern(String expression) {
+ patternExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setTimeZone(String expression) {
+ timeZoneExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+
+ public void setParseLocale(String expression) {
+ parseLocaleExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseNumberTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseNumberTag.java
new file mode 100644
index 0000000..b058fbe
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/ParseNumberTag.java
@@ -0,0 +1,82 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.LocaleUtil;
+import org.apache.taglibs.standard.tag.common.fmt.ParseNumberSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <parseNumber>} using the container's EL implementation.
+ */
+public class ParseNumberTag extends ParseNumberSupport {
+
+ private ValueExpression valueExpression;
+ private ValueExpression typeExpression;
+ private ValueExpression patternExpression;
+ private ValueExpression parseLocaleExpression;
+ private ValueExpression integerOnlyExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ type = ExpressionUtil.evaluate(typeExpression, pageContext);
+ pattern = ExpressionUtil.evaluate(patternExpression, pageContext);
+ parseLocale = LocaleUtil.parseLocaleAttributeValue(
+ ExpressionUtil.evaluate(parseLocaleExpression, pageContext));
+ isIntegerOnly = ExpressionUtil.evaluate(integerOnlyExpression, pageContext, false);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ valueExpression = null;
+ typeExpression = null;
+ patternExpression = null;
+ parseLocaleExpression = null;
+ integerOnlyExpression = null;
+
+ super.release();
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ valueSpecified = true;
+ }
+
+ public void setType(String expression) {
+ typeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPattern(String expression) {
+ patternExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setParseLocale(String expression) {
+ parseLocaleExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+
+ public void setIntegerOnly(String expression) {
+ integerOnlyExpression = ExpressionUtil.createValueExpression(pageContext, expression, Boolean.class);
+ integerOnlySpecified = true;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/RequestEncodingTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/RequestEncodingTag.java
new file mode 100644
index 0000000..3511b01
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/RequestEncodingTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.ParamSupport;
+import org.apache.taglibs.standard.tag.common.fmt.RequestEncodingSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <requestEncoding>} using the container's EL implementation.
+ */
+public class RequestEncodingTag extends RequestEncodingSupport {
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetBundleTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetBundleTag.java
new file mode 100644
index 0000000..1a459bf
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetBundleTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.BundleSupport;
+import org.apache.taglibs.standard.tag.common.fmt.SetBundleSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <setBundle>} using the container's EL implementation.
+ */
+public class SetBundleTag extends SetBundleSupport {
+
+ private ValueExpression basenameExpression;
+
+ public int doStartTag() throws JspException {
+ basename = ExpressionUtil.evaluate(basenameExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ public void release() {
+ super.release();
+
+ basenameExpression = null;
+ }
+
+
+ public void setBasename(String expression) {
+ basenameExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetLocaleTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetLocaleTag.java
new file mode 100644
index 0000000..d6921f2
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetLocaleTag.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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.ParamSupport;
+import org.apache.taglibs.standard.tag.common.fmt.SetLocaleSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class SetLocaleTag extends SetLocaleSupport {
+ private ValueExpression valueExpression;
+ private ValueExpression variantExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ variant = ExpressionUtil.evaluate(variantExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ variantExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+
+ public void setVariant(String expression) {
+ variantExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetTimeZoneTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetTimeZoneTag.java
new file mode 100644
index 0000000..f24c682
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/SetTimeZoneTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.ParamSupport;
+import org.apache.taglibs.standard.tag.common.fmt.SetTimeZoneSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <setTimeZone>} using the container's EL implementation.
+ */
+public class SetTimeZoneTag extends SetTimeZoneSupport {
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/TimeZoneTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/TimeZoneTag.java
new file mode 100644
index 0000000..e836a19
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/fmt/TimeZoneTag.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.tag.compat.fmt;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.fmt.TimeZoneSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <timeZone>} using the container's EL implementation.
+ */
+public class TimeZoneTag extends TimeZoneSupport {
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/DateParamTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/DateParamTag.java
new file mode 100644
index 0000000..2e53ea6
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/DateParamTag.java
@@ -0,0 +1,58 @@
+/*
+ * 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.tag.compat.sql;
+
+import java.util.Date;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.DateParamTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <dateParam>} using the container's EL implementation.
+ */
+public class DateParamTag extends DateParamTagSupport {
+ private ValueExpression valueExpression;
+ private ValueExpression typeExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+ type = ExpressionUtil.evaluate(typeExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ typeExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Date.class);
+ }
+
+ public void setType(String expression) {
+ typeExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/ParamTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/ParamTag.java
new file mode 100644
index 0000000..1706369
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/ParamTag.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.tag.compat.sql;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.ParamTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class ParamTag extends ParamTagSupport {
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ valueExpression = null;
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/QueryTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/QueryTag.java
new file mode 100644
index 0000000..322a511
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/QueryTag.java
@@ -0,0 +1,72 @@
+/*
+ * 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.tag.compat.sql;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.QueryTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <query>} using the container's EL implementation.
+ */
+public class QueryTag extends QueryTagSupport {
+ private ValueExpression dataSourceExpression;
+ private ValueExpression sqlExpression;
+ private ValueExpression startRowExpression;
+ private ValueExpression maxRowsExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ rawDataSource = ExpressionUtil.evaluate(dataSourceExpression, pageContext);
+ sql = ExpressionUtil.evaluate(sqlExpression, pageContext);
+ startRow = ExpressionUtil.evaluate(startRowExpression, pageContext, 0);
+ maxRows = ExpressionUtil.evaluate(maxRowsExpression, pageContext, -1);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ dataSourceExpression = null;
+ sqlExpression = null;
+ startRowExpression = null;
+ maxRowsExpression = null;
+ }
+
+ public void setDataSource(String expression) {
+ dataSourceExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ dataSourceSpecified = true;
+ }
+
+ public void setSql(String expression) {
+ sqlExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setStartRow(String expression) {
+ startRowExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ }
+
+ public void setMaxRows(String expression) {
+ maxRowsExpression = ExpressionUtil.createValueExpression(pageContext, expression, Integer.class);
+ maxRowsSpecified = true;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/SetDataSourceTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/SetDataSourceTag.java
new file mode 100644
index 0000000..22525bc
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/SetDataSourceTag.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.tag.compat.sql;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.SetDataSourceTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <setDataSource>} using the container's EL implementation.
+ */
+public class SetDataSourceTag extends SetDataSourceTagSupport {
+ private ValueExpression dataSourceExpression;
+ private ValueExpression driverClassNameExpression;
+ private ValueExpression jdbcUrlExpression;
+ private ValueExpression usernameExpression;
+ private ValueExpression passwordExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ dataSource = ExpressionUtil.evaluate(dataSourceExpression, pageContext);
+ driverClassName = ExpressionUtil.evaluate(driverClassNameExpression, pageContext);
+ jdbcURL = ExpressionUtil.evaluate(jdbcUrlExpression, pageContext);
+ userName = ExpressionUtil.evaluate(usernameExpression, pageContext);
+ password = ExpressionUtil.evaluate(passwordExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ dataSourceExpression = null;
+ driverClassNameExpression = null;
+ jdbcUrlExpression = null;
+ usernameExpression = null;
+ passwordExpression = null;
+ }
+
+ public void setDataSource(String expression) {
+ dataSourceExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ dataSourceSpecified = true;
+ }
+
+ public void setDriver(String expression) {
+ driverClassNameExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setUrl(String expression) {
+ jdbcUrlExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setUser(String expression) {
+ usernameExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setPassword(String expression) {
+ passwordExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/TransactionTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/TransactionTag.java
new file mode 100644
index 0000000..ea9da12
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/TransactionTag.java
@@ -0,0 +1,59 @@
+/*
+ * 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.tag.compat.sql;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.TransactionTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <transaction>} using the container's EL implementation.
+ */
+public class TransactionTag extends TransactionTagSupport {
+ private ValueExpression dataSourceExpression;
+ private ValueExpression isolationExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ rawDataSource = ExpressionUtil.evaluate(dataSourceExpression, pageContext);
+ if (isolationExpression != null) {
+ super.setIsolation((String) ExpressionUtil.evaluate(isolationExpression, pageContext));
+ }
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ dataSourceExpression = null;
+ isolationExpression = null;
+ }
+
+ public void setDataSource(String expression) {
+ dataSourceExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ dataSourceSpecified = true;
+ }
+
+ public void setIsolation(String expression) {
+ isolationExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/UpdateTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/UpdateTag.java
new file mode 100644
index 0000000..bc525b5
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/sql/UpdateTag.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.tag.compat.sql;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.UpdateTagSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <update>} using the container's EL implementation.
+ */
+public class UpdateTag extends UpdateTagSupport {
+ private ValueExpression dataSourceExpression;
+ private ValueExpression sqlExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ rawDataSource = ExpressionUtil.evaluate(dataSourceExpression, pageContext);
+ sql = ExpressionUtil.evaluate(sqlExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ dataSourceExpression = null;
+ sqlExpression = null;
+ }
+
+ public void setDataSource(String expression) {
+ dataSourceExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ dataSourceSpecified = true;
+ }
+
+ public void setSql(String expression) {
+ sqlExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ExprTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ExprTag.java
new file mode 100644
index 0000000..5a67554
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ExprTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tag.compat.xml;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.ParamTagSupport;
+import org.apache.taglibs.standard.tag.common.xml.ExprSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <out>} using the container's EL implementation.
+ */
+public class ExprTag extends ExprSupport {
+ private ValueExpression escapeXmlExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ escapeXml = ExpressionUtil.evaluate(escapeXmlExpression, pageContext, true);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ escapeXmlExpression = null;
+ }
+
+ public void setEscapeXml(String expression) {
+ escapeXmlExpression = ExpressionUtil.createValueExpression(pageContext, expression, Boolean.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParamTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParamTag.java
new file mode 100644
index 0000000..b439ac3
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParamTag.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.tag.compat.xml;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.sql.ParamTagSupport;
+import org.apache.taglibs.standard.tag.common.xml.ParamSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class ParamTag extends ParamSupport {
+ private ValueExpression nameExpression;
+ private ValueExpression valueExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ name = ExpressionUtil.evaluate(nameExpression, pageContext);
+ value = ExpressionUtil.evaluate(valueExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ nameExpression = null;
+ valueExpression = null;
+ }
+
+ public void setName(String expression) {
+ nameExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setValue(String expression) {
+ valueExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParseTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParseTag.java
new file mode 100644
index 0000000..fc59c47
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/ParseTag.java
@@ -0,0 +1,64 @@
+/*
+ * 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.tag.compat.xml;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+
+import org.apache.taglibs.standard.tag.common.xml.ParseSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+import org.xml.sax.XMLFilter;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class ParseTag extends ParseSupport {
+ private ValueExpression xmlExpression;
+ private ValueExpression systemIdExpression;
+ private ValueExpression filterExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ xml = ExpressionUtil.evaluate(xmlExpression, pageContext);
+ systemId = ExpressionUtil.evaluate(systemIdExpression, pageContext);
+ filter = ExpressionUtil.evaluate(filterExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ xmlExpression = null;
+ systemIdExpression = null;
+ filterExpression = null;
+ }
+
+ public void setXml(String expression) {
+ xmlExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+
+ public void setSystemId(String expression) {
+ systemIdExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setFilter(String expression) {
+ filterExpression = ExpressionUtil.createValueExpression(pageContext, expression, XMLFilter.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/TransformTag.java b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/TransformTag.java
new file mode 100644
index 0000000..f3d2319
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tag/compat/xml/TransformTag.java
@@ -0,0 +1,79 @@
+/*
+ * 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.tag.compat.xml;
+
+import javax.el.ValueExpression;
+import javax.servlet.jsp.JspException;
+import javax.xml.transform.Result;
+
+import org.apache.taglibs.standard.tag.common.xml.TransformSupport;
+import org.apache.taglibs.standard.util.ExpressionUtil;
+
+/**
+ * Implementation of JSTL 1.0 {@code <param>} using the container's EL implementation.
+ */
+public class TransformTag extends TransformSupport {
+ private ValueExpression xmlExpression;
+ private ValueExpression xmlSystemIdExpression;
+ private ValueExpression xsltExpression;
+ private ValueExpression xsltSystemIdExpression;
+ private ValueExpression resultExpression;
+
+ @Override
+ public int doStartTag() throws JspException {
+ xml = ExpressionUtil.evaluate(xmlExpression, pageContext);
+ xmlSystemId = ExpressionUtil.evaluate(xmlSystemIdExpression, pageContext);
+ xslt = ExpressionUtil.evaluate(xsltExpression, pageContext);
+ xsltSystemId = ExpressionUtil.evaluate(xsltSystemIdExpression, pageContext);
+ result = ExpressionUtil.evaluate(resultExpression, pageContext);
+
+ return super.doStartTag();
+ }
+
+ @Override
+ public void release() {
+ super.release();
+
+ xmlExpression = null;
+ xmlSystemIdExpression = null;
+ xsltExpression = null;
+ xsltSystemIdExpression = null;
+ resultExpression = null;
+ }
+
+ public void setXml(String expression) {
+ xmlExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ xmlSpecified = true;
+ }
+
+ public void setXmlSystemId(String expression) {
+ xmlSystemIdExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setXslt(String expression) {
+ xsltExpression = ExpressionUtil.createValueExpression(pageContext, expression, Object.class);
+ }
+
+ public void setXsltSystemId(String expression) {
+ xsltSystemIdExpression = ExpressionUtil.createValueExpression(pageContext, expression, String.class);
+ }
+
+ public void setResult(String expression) {
+ resultExpression = ExpressionUtil.createValueExpression(pageContext, expression, Result.class);
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELCoreTLV.java b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELCoreTLV.java
new file mode 100644
index 0000000..a5d7d87
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELCoreTLV.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tlv.compat;
+
+import org.apache.taglibs.standard.tlv.JstlCoreTLV;
+
+/**
+ */
+public class JstlELCoreTLV extends JstlCoreTLV {
+ @Override
+ protected String validateExpression(String elem, String att, String expr) {
+ return null;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELFmtTLV.java b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELFmtTLV.java
new file mode 100644
index 0000000..4134c1d
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELFmtTLV.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tlv.compat;
+
+import org.apache.taglibs.standard.tlv.JstlFmtTLV;
+
+/**
+ */
+public class JstlELFmtTLV extends JstlFmtTLV {
+ @Override
+ protected String validateExpression(String elem, String att, String expr) {
+ return null;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELSqlTLV.java b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELSqlTLV.java
new file mode 100644
index 0000000..53807f5
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELSqlTLV.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tlv.compat;
+
+import org.apache.taglibs.standard.tlv.JstlSqlTLV;
+
+/**
+ */
+public class JstlELSqlTLV extends JstlSqlTLV {
+ @Override
+ protected String validateExpression(String elem, String att, String expr) {
+ return null;
+ }
+}
diff --git a/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELXmlTLV.java b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELXmlTLV.java
new file mode 100644
index 0000000..1bd893d
--- /dev/null
+++ b/compat/src/main/java/org/apache/taglibs/standard/tlv/compat/JstlELXmlTLV.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tlv.compat;
+
+import org.apache.taglibs.standard.tlv.JstlXmlTLV;
+
+/**
+ */
+public class JstlELXmlTLV extends JstlXmlTLV {
+ @Override
+ protected String validateExpression(String elem, String att, String expr) {
+ return null;
+ }
+}
diff --git a/compat/src/main/resources/META-INF/c-1_0.tld b/compat/src/main/resources/META-INF/c-1_0.tld
new file mode 100644
index 0000000..da3573f
--- /dev/null
+++ b/compat/src/main/resources/META-INF/c-1_0.tld
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ ~ 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.
+ -->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.0</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>c</short-name>
+ <uri>http://java.sun.com/jstl/core</uri>
+ <display-name>JSTL core</display-name>
+ <description>JSTL 1.0 core library</description>
+
+ <validator>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.compat.JstlELCoreTLV
+ </validator-class>
+ <init-param>
+ <param-name>expressionAttributes</param-name>
+ <param-value>
+ out:value
+ out:default
+ out:escapeXml
+ if:test
+ import:url
+ import:context
+ import:charEncoding
+ forEach:items
+ forEach:begin
+ forEach:end
+ forEach:step
+ forTokens:items
+ forTokens:begin
+ forTokens:end
+ forTokens:step
+ param:encode
+ param:name
+ param:value
+ redirect:context
+ redirect:url
+ set:property
+ set:target
+ set:value
+ url:context
+ url:value
+ when:test
+ </param-value>
+ <description>
+ Whitespace-separated list of colon-separated token pairs
+ describing tag:attribute combinations that accept expressions.
+ The validator uses this information to determine which
+ attributes need their syntax validated.
+ </description>
+ </init-param>
+ </validator>
+
+ <tag>
+ <name>catch</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Catches any Throwable that occurs in its body and optionally
+ exposes it.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>choose</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ <when> and <otherwise>
+ </description>
+ </tag>
+
+ <tag>
+ <name>out</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.OutTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Like <%= ... >, but for expressions.
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>default</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>escapeXml</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>if</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.IfTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Simple conditional tag, which evalutes its body if the
+ supplied condition is true and optionally exposes a Boolean
+ scripting variable representing the evaluation of this condition
+ </description>
+ <attribute>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>import</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.ImportTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ Retrieves an absolute or relative URL and exposes its contents
+ to either the page, a String in 'var', or a Reader in 'varReader'.
+ </description>
+ <attribute>
+ <name>url</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varReader</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>charEncoding</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>forEach</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.ForEachTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ The basic iteration tag, accepting many different
+ collection types and supporting subsetting and other
+ functionality
+ </description>
+ <attribute>
+ <name>items</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>forTokens</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.ForTokensTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Iterates over tokens, separated by the supplied delimeters
+ </description>
+ <attribute>
+ <name>items</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>delims</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>begin</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>end</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>step</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varStatus</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>otherwise</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Subtag of <choose> that follows <when> tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+ </description>
+ </tag>
+
+ <tag>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Adds a parameter to a containing 'import' tag's URL.
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>redirect</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.RedirectTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Redirects to a new URL.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>remove</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Removes a scoped variable (from a particular scope, if specified).
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>set</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.SetTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Sets the result of an expression evaluation in a 'scope'
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>url</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.UrlTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Prints or exposes a URL with optional query parameters
+ (via the c:param tag).
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>when</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.core.WhenTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Subtag of <choose> that includes its body if its
+ condition evalutes to 'true'
+ </description>
+ <attribute>
+ <name>test</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+</taglib>
diff --git a/compat/src/main/resources/META-INF/fmt-1_0.tld b/compat/src/main/resources/META-INF/fmt-1_0.tld
new file mode 100644
index 0000000..4caec3d
--- /dev/null
+++ b/compat/src/main/resources/META-INF/fmt-1_0.tld
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ ~ 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.
+ -->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.0</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>fmt</short-name>
+ <uri>http://java.sun.com/jstl/fmt</uri>
+ <display-name>JSTL fmt</display-name>
+ <description>JSTL 1.0 i18n-capable formatting library</description>
+
+ <validator>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.compat.JstlELFmtTLV
+ </validator-class>
+ <init-param>
+ <param-name>expressionAttributes</param-name>
+ <param-value>
+ requestEncoding:value
+ setLocale:value
+ setLocale:variant
+ timeZone:value
+ setTimeZone:value
+ bundle:basename
+ bundle:prefix
+ setBundle:basename
+ message:key
+ message:bundle
+ param:value
+ formatNumber:value
+ formatNumber:pattern
+ formatNumber:currencyCode
+ formatNumber:currencySymbol
+ formatNumber:groupingUsed
+ formatNumber:maxIntegerDigits
+ formatNumber:minIntegerDigits
+ formatNumber:maxFractionDigits
+ formatNumber:minFractionDigits
+ parseNumber:value
+ parseNumber:pattern
+ parseNumber:parseLocale
+ parseNumber:integerOnly
+ formatDate:value
+ formatDate:pattern
+ formatDate:timeZone
+ parseDate:value
+ parseDate:pattern
+ parseDate:timeZone
+ parseDate:parseLocale
+ </param-value>
+ <description>
+ Whitespace-separated list of colon-separated token pairs
+ describing tag:attribute combinations that accept expressions.
+ The validator uses this information to determine which
+ attributes need their syntax validated.
+ </description>
+ </init-param>
+ </validator>
+
+ <tag>
+ <name>requestEncoding</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.RequestEncodingTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Sets the request character encoding
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>setLocale</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.SetLocaleTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Stores the given locale in the locale configuration variable
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>variant</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>timeZone</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.TimeZoneTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Specifies the time zone for any time formatting or parsing actions
+ nested in its body
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>setTimeZone</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.SetTimeZoneTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Stores the given time zone in the time zone configuration variable
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>bundle</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.BundleTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Loads a resource bundle to be used by its tag body
+ </description>
+ <attribute>
+ <name>basename</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>prefix</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>setBundle</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.SetBundleTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Loads a resource bundle and stores it in the named scoped variable or
+ the bundle configuration variable
+ </description>
+ <attribute>
+ <name>basename</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>message</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.MessageTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Maps key to localized message and performs parametric replacement
+ </description>
+ <attribute>
+ <name>key</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>bundle</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Supplies an argument for parametric replacement to a containing
+ <message> tag
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>formatNumber</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.FormatNumberTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Formats a numeric value as a number, currency, or percentage
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>currencyCode</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>currencySymbol</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>groupingUsed</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxIntegerDigits</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minIntegerDigits</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxFractionDigits</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minFractionDigits</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>parseNumber</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.ParseNumberTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Parses the string representation of a number, currency, or percentage
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>parscompatocale</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>integerOnly</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>formatDate</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.FormatDateTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Formats a date and/or time using the supplied styles and pattern
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>dateStyle</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>timeStyle</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>timeZone</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>parseDate</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.fmt.ParseDateTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Parses the string representation of a date and/or time
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>dateStyle</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>timeStyle</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>pattern</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>timeZone</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>parscompatocale</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+</taglib>
diff --git a/compat/src/main/resources/META-INF/sql-1_0.tld b/compat/src/main/resources/META-INF/sql-1_0.tld
new file mode 100644
index 0000000..fa6353e
--- /dev/null
+++ b/compat/src/main/resources/META-INF/sql-1_0.tld
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ ~ 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.
+ -->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.0</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>sql</short-name>
+ <uri>http://java.sun.com/jstl/sql</uri>
+ <display-name>JSTL sql</display-name>
+ <description>JSTL 1.0 sql library</description>
+
+ <validator>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.compat.JstlELSqlTLV
+ </validator-class>
+ <init-param>
+ <param-name>expressionAttributes</param-name>
+ <param-value>
+ transaction:dataSource
+ transaction:isolation
+ query:sql
+ query:dataSource
+ query:startRow
+ query:maxRows
+ update:sql
+ update:dataSource
+ param:value
+ dateParam:value
+ dateParam:type
+ setDataSource:dataSource
+ setDataSource:driver
+ setDataSource:url
+ setDataSource:user
+ setDataSource:password
+ </param-value>
+ <description>
+ Whitespace-separated list of colon-separated token pairs
+ describing tag:attribute combinations that accept expressions.
+ The validator uses this information to determine which
+ attributes need their syntax validated.
+ </description>
+ </init-param>
+ </validator>
+
+ <tag>
+ <name>transaction</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.TransactionTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Provides nested database action elements with a shared Connection,
+ set up to execute all statements as one transaction.
+ </description>
+ <attribute>
+ <name>dataSource</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>isolation</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>query</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.QueryTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Executes the SQL query defined in its body or through the
+ sql attribute.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>sql</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>dataSource</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>startRow</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxRows</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>update</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.UpdateTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Executes the SQL update defined in its body or through the
+ sql attribute.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>sql</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>dataSource</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Sets a parameter in an SQL statement to the specified value.
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>dateParam</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.DateParamTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Sets a parameter in an SQL statement to the specified java.util.Date val
+ ue.
+ </description>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>setDataSource</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.sql.SetDataSourceTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Creates a simple DataSource suitable only for prototyping.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>dataSource</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>driver</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>url</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>password</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+</taglib>
diff --git a/compat/src/main/resources/META-INF/x-1_0.tld b/compat/src/main/resources/META-INF/x-1_0.tld
new file mode 100644
index 0000000..5ff8911
--- /dev/null
+++ b/compat/src/main/resources/META-INF/x-1_0.tld
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ ~ 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.
+ -->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.0</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>x</short-name>
+ <uri>http://java.sun.com/jstl/xml</uri>
+ <display-name>JSTL XML</display-name>
+ <description>JSTL 1.0 XML library</description>
+
+ <validator>
+ <validator-class>
+ org.apache.taglibs.standard.tlv.compat.JstlELXmlTLV
+ </validator-class>
+ <init-param>
+ <param-name>expressionAttributes</param-name>
+ <param-value>
+ out:escapeXml
+ parse:xml
+ parse:systemId
+ parse:filter
+ transform:xml
+ transform:xmlSystemId
+ transform:xslt
+ transform:xsltSystemId
+ transform:result
+ </param-value>
+ <description>
+ Whitespace-separated list of colon-separated token pairs
+ describing tag:attribute combinations that accept expressions.
+ The validator uses this information to determine which
+ attributes need their syntax validated.
+ </description>
+ </init-param>
+ </validator>
+
+ <tag>
+ <name>choose</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ <when> and <otherwise>
+ </description>
+ </tag>
+
+ <tag>
+ <name>out</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.xml.ExprTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Like <%= ... >, but for XPath expressions.
+ </description>
+ <attribute>
+ <name>select</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>escapeXml</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>if</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.xml.IfTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ XML conditional tag, which evalutes its body if the
+ supplied XPath expression evalutes to 'true' as a boolean
+ </description>
+ <attribute>
+ <name>select</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>forEach</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.xml.ForEachTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ XML iteration tag.
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>select</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>otherwise</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Subtag of <choose> that follows <when> tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+ </description>
+ </tag>
+
+ <tag>
+ <name>param</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.xml.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Adds a parameter to a containing 'transform' tag's Transformer
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>parse</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.xml.ParseTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.XmlParseTEI</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ Parses XML content from 'source' attribute or 'body'
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>varDom</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scopeDom</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>xml</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>systemId</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>filter</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>set</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.xml.SetTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ Saves the result of an XPath expression evaluation in a 'scope'
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>select</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>transform</name>
+ <tag-class>org.apache.taglibs.standard.tag.compat.xml.TransformTag</tag-class>
+ <tei-class>org.apache.taglibs.standard.tei.XmlTransformTEI</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ Conducts a transformation given a source XML document
+ and an XSLT stylesheet
+ </description>
+ <attribute>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>result</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>xml</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>xmlSystemId</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>xslt</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>xsltSystemId</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>when</name>
+ <tag-class>org.apache.taglibs.standard.tag.common.xml.WhenTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ Subtag of <choose> that includes its body if its
+ expression evalutes to 'true'
+ </description>
+ <attribute>
+ <name>select</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+</taglib>
diff --git a/impl/src/main/java/org/apache/taglibs/standard/util/ExpressionUtil.java b/impl/src/main/java/org/apache/taglibs/standard/util/ExpressionUtil.java
index 108a157..fb027da 100644
--- a/impl/src/main/java/org/apache/taglibs/standard/util/ExpressionUtil.java
+++ b/impl/src/main/java/org/apache/taglibs/standard/util/ExpressionUtil.java
@@ -50,4 +50,38 @@
JspApplicationContext appContext = JspFactory.getDefaultFactory().getJspApplicationContext(pageContext.getServletContext());
return appContext.getExpressionFactory();
}
+
+ /**
+ * Evaluate a value expression. To support optional attributes, if the expression is null then
+ * null will be returned.
+ *
+ * @param expression the expression
+ * @param pageContext the context for the JSP
+ * @param <T> the expected type of the expression
+ * @return the result of evaluating the expression
+ */
+ public static <T> T evaluate(ValueExpression expression, PageContext pageContext) {
+ if (expression == null) {
+ return null;
+ }
+ @SuppressWarnings("unchecked")
+ T value = (T) expression.getValue(pageContext.getELContext());
+ return value;
+ }
+
+ public static boolean evaluate(ValueExpression expression, PageContext pageContext, boolean fallback) {
+ if (expression == null) {
+ return fallback;
+ }
+ Boolean result = (Boolean) expression.getValue(pageContext.getELContext());
+ return result == null ? fallback : result.booleanValue();
+ }
+
+ public static int evaluate(ValueExpression expression, PageContext pageContext, int fallback) {
+ if (expression == null) {
+ return fallback;
+ }
+ Integer result = (Integer) expression.getValue(pageContext.getELContext());
+ return result == null ? fallback : result.intValue();
+ }
}