You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/08/26 07:46:58 UTC

svn commit: r240168 [25/30] - in /struts/sandbox/trunk/ti: ./ core/src/java/org/apache/ti/ core/src/java/org/apache/ti/config/ core/src/java/org/apache/ti/config/mapper/ core/src/java/org/apache/ti/core/ core/src/java/org/apache/ti/core/factory/ core/s...

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/iterator/ResultSetIterator.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/iterator/ResultSetIterator.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/iterator/ResultSetIterator.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/iterator/ResultSetIterator.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.iterator;
+
+import org.apache.ti.util.Bundle;
+import org.apache.ti.util.logging.Logger;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * <p/>
+ * {@link Iterator} implementation for {@link ResultSet}.
+ * </p>
+ */
+public class ResultSetIterator
+        implements Iterator {
+
+    private static final Logger LOGGER = Logger.getInstance(ResultSetIterator.class);
+
+    private boolean _primed = false;
+    private String[] _columnNames = null;
+    private ResultSet _rs = null;
+
+    /**
+     * Create a ResultSetIterator for the <code>resultSet</code>.
+     *
+     * @param resultSet the ResultSet to iterate over
+     * @throws IllegalStateException when a {@link SQLException} occurs manipulating the ResultSet
+     */
+    public ResultSetIterator(ResultSet resultSet) {
+        if (resultSet == null)
+            return;
+
+        _rs = resultSet;
+
+        try {
+            // handle RSMD here to build a template map that can contain the data for each row
+            ResultSetMetaData rsmd = _rs.getMetaData();
+            assert rsmd != null;
+
+            int cols = rsmd.getColumnCount();
+            _columnNames = new String[cols];
+            for (int i = 1; i <= cols; i++) {
+                _columnNames[i - 1] = rsmd.getColumnName(i);
+                LOGGER.trace("column[" + i + "]: " + _columnNames[i - 1]);
+            }
+        } catch (SQLException sql) {
+            String msg = "An exception occurred reading ResultSetMetaData from a ResultSet.  Cause: " + sql;
+            LOGGER.error(msg, sql);
+            IllegalStateException e = new IllegalStateException(msg);
+            e.initCause(sql);
+            throw e;
+        }
+    }
+
+    /**
+     * Check for a subsequent item in the ResultSet.
+     *
+     * @return <code>true</code> if there is another element; <code>false</code> otherwise
+     * @throws IllegalStateException when a {@link SQLException} occurs advancing the ResultSet
+     */
+    public boolean hasNext() {
+        if (_rs == null)
+            return false;
+
+        if (_primed)
+            return true;
+
+        try {
+            _primed = _rs.next();
+            return _primed;
+        } catch (SQLException sql) {
+            String msg = "An exception occurred reading from the Iterator.  Cause: " + sql;
+            LOGGER.error(msg, sql);
+            IllegalStateException e = new IllegalStateException(msg);
+            e.initCause(sql);
+            throw e;
+        }
+    }
+
+    /**
+     * Advance to the next row in the ResultSet.
+     *
+     * @return a {@link java.util.Map} containing the data in the next row.  The keys in the map
+     *         correspond to the ResultSet's column names and are case insensitive when checking a key.
+     * @throws NoSuchElementException if the ResultSet is null or the end of the ResultSet has been reached
+     */
+    public Object next() {
+        if (_rs == null)
+            throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+
+        try {
+            if (!_primed) {
+                _primed = _rs.next();
+                if (!_primed) {
+                    throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
+                }
+            }
+
+            _primed = false;
+            return convertRow(_rs, _columnNames);
+        } catch (SQLException sql) {
+            String msg = "An exception occurred reading from the Iterator.  Cause: " + sql;
+            LOGGER.error(msg, sql);
+            IllegalStateException e = new IllegalStateException(msg);
+            e.initCause(sql);
+            throw e;
+        }
+    }
+
+    /**
+     * The remove operation is unsupported on the ResultSetIterator.
+     *
+     * @throws UnsupportedOperationException always
+     */
+    public void remove() {
+        throw new UnsupportedOperationException(Bundle.getErrorString("IteratorFactory_Iterator_removeUnsupported",
+                new Object[]{this.getClass().getName()}));
+    }
+
+    private static final Object convertRow(final ResultSet resultSet, final String[] columnNames)
+            throws SQLException {
+        SortedMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);
+        for (int i = 0; i < columnNames.length; i++) {
+            Object value = resultSet.getObject(i + 1);
+            if (resultSet.wasNull())
+                value = null;
+            map.put(columnNames[i], value);
+        }
+        return map;
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/Logger.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/Logger.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/Logger.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/Logger.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.logging;
+
+import org.apache.commons.logging.Log;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Method;
+
+/**
+ * <p/>
+ * Logging abstraction for NetUI.  This class leverages Jakarta commons-logging to create
+ * loggers for NetUI messages.  Application developers can provide their own logger
+ * implementations by following the instructions for creating new Log / LogFactory instances
+ * in commons-logging.
+ * </p>
+ */
+public class Logger
+        implements Log {
+
+    /**
+     * Factory method for creating NetUI Logger instances.
+     *
+     * @param loggerClient the class whose logger to create
+     * @return a {@link Logger} instance for the given class
+     */
+    public static Logger getInstance(Class loggerClient) {
+        return new Logger(org.apache.commons.logging.LogFactory.getLog(loggerClient.getName()));
+    }
+
+    private Log _logDelegate = null;
+
+    /**
+     * Constructor that returns a Log4J logger.  This method is deprecated
+     * in favor of using commons-logging to do logger creation via the
+     * {@link #getInstance(Class)} method.
+     *
+     * @param clientClass
+     * @see #getInstance(Class)
+     * @deprecated
+     */
+    public Logger(Class clientClass) {
+        _logDelegate = createDefaultLogger(clientClass);
+    }
+
+    /**
+     * Constructor that returns a Log4J logger.  This method is deprecated
+     * in favor of using commons-logging to do logger creation via the
+     * {@link #getInstance(Class)} method.
+     *
+     * @param clientClassName
+     * @see #getInstance(Class)
+     * @deprecated
+     */
+    public Logger(String clientClassName) {
+        Class clientClass = null;
+        try {
+            /* create a default log4j logger -- this shouldn't throw a CNF exception */
+            clientClass = Class.forName(clientClassName);
+        } catch (ClassNotFoundException e) {
+            throw new IllegalArgumentException("Could not load NetUI logger client class '" + clientClassName + "'");
+        }
+        _logDelegate = createDefaultLogger(clientClass);
+    }
+
+    /**
+     * Internal method used by the factory to create a Logger instance.
+     *
+     * @param logDelegate the commons-logging {@link Log} to which messages should be logged
+     */
+    private Logger(Log logDelegate) {
+        _logDelegate = logDelegate;
+    }
+
+    public boolean isDebugEnabled() {
+        return _logDelegate.isDebugEnabled();
+    }
+
+    public boolean isErrorEnabled() {
+        return _logDelegate.isErrorEnabled();
+    }
+
+    public boolean isFatalEnabled() {
+        return _logDelegate.isFatalEnabled();
+    }
+
+    public boolean isInfoEnabled() {
+        return _logDelegate.isInfoEnabled();
+    }
+
+    public boolean isTraceEnabled() {
+        return _logDelegate.isTraceEnabled();
+    }
+
+    public boolean isWarnEnabled() {
+        return _logDelegate.isWarnEnabled();
+    }
+
+    public void debug(Object message) {
+        if (isDebugEnabled())
+            _logDelegate.debug(message);
+    }
+
+    public void debug(Object message, Throwable t) {
+        if (isDebugEnabled())
+            _logDelegate.debug(format(message, t));
+    }
+
+    public void trace(Object message) {
+        if (isTraceEnabled())
+            _logDelegate.trace(message);
+    }
+
+    public void trace(Object message, Throwable t) {
+        if (isTraceEnabled())
+            _logDelegate.trace(format(message, t));
+    }
+
+    public void info(Object message) {
+        if (isInfoEnabled())
+            _logDelegate.info(message);
+    }
+
+    public void info(Object message, Throwable t) {
+        if (isInfoEnabled())
+            _logDelegate.info(format(message, t));
+    }
+
+    public void warn(Object message) {
+        if (isWarnEnabled())
+            _logDelegate.warn(message);
+    }
+
+    public void warn(Object message, Throwable t) {
+        if (isWarnEnabled())
+            _logDelegate.warn(format(message, t));
+    }
+
+    public void error(Object message) {
+        if (isErrorEnabled())
+            _logDelegate.error(message);
+    }
+
+    public void error(Object message, Throwable t) {
+        if (isErrorEnabled())
+            _logDelegate.error(format(message, t));
+    }
+
+    public void fatal(Object message) {
+        if (isFatalEnabled())
+            _logDelegate.fatal(message);
+    }
+
+    public void fatal(Object message, Throwable t) {
+        if (isFatalEnabled())
+            _logDelegate.fatal(format(message, t));
+    }
+
+    private String format(Object m, Throwable t) {
+        if (t == null)
+            return m.toString();
+
+        StringWriter sw = new StringWriter();
+        t.printStackTrace(new PrintWriter(sw));
+        
+        /* note, no reason to close a StringWriter */
+        
+        return m + "\n\n" + "Throwable: " + t.toString() + "\nStack Trace:\n" + sw.toString();
+    }
+
+    /**
+     * Internal method used to create the backwards-compat NetUI logger.  This method
+     * looks up the {@link org.apache.beehive.netui.util.logging.internal.Log4JLogger}
+     * and creates a new instance returning the resulting {@link Log}.
+     *
+     * @param loggerClient the logger client
+     * @return the {@link Log} instance
+     */
+    private static final Log createDefaultLogger(Class loggerClient) {
+        assert loggerClient != null : "Received a null loggerClient Class";
+
+        String className = "org.apache.beehive.netui.util.logging.internal.Log4JLogger";
+        try {
+            Class logDelegateClass = Logger.class.getClassLoader().loadClass(className);
+            Method method = logDelegateClass.getMethod("getInstance", new Class[]{Class.class});
+            return (Log) method.invoke(null, new Object[]{loggerClient});
+        } catch (Exception e) {
+            IllegalStateException ie = new IllegalStateException("Could not create log implementation '" + className +
+                    "' for client of type '" + loggerClient.getName() + "'");
+            ie.initCause(e);
+            throw ie;
+        }
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/internal/Log4JLogger.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/internal/Log4JLogger.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/internal/Log4JLogger.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/logging/internal/Log4JLogger.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.logging.internal;
+
+import org.apache.commons.logging.Log;
+import org.apache.log4j.Category;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * <p/>
+ * Logging abstraction used to pipe log messages to Log4J.  This class is used for
+ * NetUI backwards compatability so that previous {@link org.apache.beehive.netui.util.logging.Logger}
+ * clients continue to log through the usual Log4J channels.
+ * </p>
+ *
+ * @deprecated
+ */
+public final class Log4JLogger
+        implements Log {
+
+    private static final String STRUTS_APPENDER = "commons-logging";
+
+    static {
+        // Need to get rid of the appender that Struts adds so
+        // that we don't spam the console with all messages
+        Category root = Category.getRoot();
+
+        if (root.getAppender(STRUTS_APPENDER) != null)
+            root.removeAppender(STRUTS_APPENDER);
+    }
+
+    private Logger _logInstance;
+
+    public static Log getInstance(Class clazz) {
+        return new Log4JLogger(clazz);
+    }
+
+    private Log4JLogger(Class clazz) {
+        this(clazz.getName());
+    }
+
+    private Log4JLogger(String className) {
+        _logInstance = Logger.getLogger(className);
+    }
+
+    public boolean isDebugEnabled() {
+        return _logInstance.isEnabledFor(Level.DEBUG);
+    }
+
+    public boolean isErrorEnabled() {
+        return _logInstance.isEnabledFor(Level.ERROR);
+    }
+
+    public boolean isFatalEnabled() {
+        return _logInstance.isEnabledFor(Level.FATAL);
+    }
+
+    public boolean isInfoEnabled() {
+        return _logInstance.isEnabledFor(Level.INFO);
+    }
+
+    public boolean isTraceEnabled() {
+        return _logInstance.isEnabledFor(Level.DEBUG);
+    }
+
+    public boolean isWarnEnabled() {
+        return _logInstance.isEnabledFor(Level.WARN);
+    }
+
+    public void debug(Object message) {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(message);
+    }
+
+    public void debug(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(format(message, t));
+    }
+
+    public void trace(Object message) {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(message);
+    }
+
+    public void trace(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.DEBUG))
+            _logInstance.debug(format(message, t));
+    }
+
+    public void info(Object message) {
+        if (_logInstance.isEnabledFor(Level.INFO))
+            _logInstance.info(message);
+    }
+
+    public void info(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.INFO))
+            _logInstance.info(format(message, t));
+    }
+
+    public void warn(Object message) {
+        if (_logInstance.isEnabledFor(Level.WARN))
+            _logInstance.warn(message);
+    }
+
+    public void warn(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.WARN))
+            _logInstance.warn(format(message, t));
+    }
+
+    public void error(Object message) {
+        if (_logInstance.isEnabledFor(Level.ERROR))
+            _logInstance.error(message);
+    }
+
+    public void error(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.ERROR))
+            _logInstance.error(format(message, t));
+    }
+
+    public void fatal(Object message) {
+        if (_logInstance.isEnabledFor(Level.FATAL))
+            _logInstance.fatal(message);
+    }
+
+    public void fatal(Object message, Throwable t) {
+        if (_logInstance.isEnabledFor(Level.FATAL))
+            _logInstance.fatal(format(message, t));
+    }
+
+    private String format(Object m, Throwable t) {
+        if (t == null)
+            return m.toString();
+
+        StringWriter sw = new StringWriter();
+        t.printStackTrace(new PrintWriter(sw));
+
+        return m + "\n\n" + "Throwable: " + t.toString() + "\nStack Trace:\n" + sw.toString();
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/messages.properties
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/messages.properties?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/messages.properties (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/messages.properties Thu Aug 25 22:46:03 2005
@@ -0,0 +1,695 @@
+System_StringNotFound=Unable to find string with name {0}.
+
+Tags_Exception=Exception: {0}
+Tags_WriteException=JspException writting to the response.
+Tags_NotURLRewriter={0} is not a URLRewriter.
+Tags_AttrValueRequired=Attribute ''{0}'' is required to have a value.  The value "" is illegal.  This is often cause by binding to an object with a null value.
+Tags_MapAttrValueRequired=Attribute ''{0}'' is required to have a Map value.  The value null is illegal.  This is often cause by binding to an object with a null value.
+Tags_BadAction=Action ''{0}'' is not a valid action.
+Tags_NullBadAction=Action was resolved as "", this is probably the result of an expression bound to a null Object.
+Tags_NullAction=The expression {0} results in a null action.
+Tags_SelectBadTagValue=Could not set Select with given value {0}.
+Tags_SelectBadRepeatingStage=''{0}'' is an invalid stage for a repeating Select box.  Please use <b>option, default, dataSource or null</b>
+Tags_RadioButtonGroupBadTagValue=Could not set RadioButtonGroup with given value {0}.
+Tags_CheckBoxGroupBadTagValue=Could not set CheckBoxGroup with given value {0}.
+Tags_FormNoFormBean=Could not find a form bean for this Form tag.
+Tags_FormParentForm=A Form cannot be enclosed by another Form.
+Tags_TextAreaNoFormBean=Could not find a form bean for this TextArea tag.
+Tags_RadioButtonGroupNoFormBean=Could not find a form bean for this RadioButtonGroup tag.
+Tags_RadioButtonNoRadioButtonGroup=Could not find RadioButtonGroup for the RadioButton.
+Tags_SelectNoFormBean=Could not find a form bean for this Select tag.
+Tags_FormBeanNoBeanAccess=Could not access form bean property {0}.
+Tags_FormBeanTargetError=Target invocation error trying to access form bean property {0}.
+Tags_FormBeanNoMethodError=Could not find a bean method to access form bean property {0}.
+Tags_TreeMultipleRootNodes=There cannot be more than one root TreeElement for a Tree.
+Tags_TreeNoAttribute=The variable referenced by ''{0}'' was <b>null</b>.  No TreeElement was found.
+Tags_TreeRootImageError=Unable to set the root images on the tree because it is not an ITreeRootElement.
+Tags_TreeRunAtClientRoot=A tree requires a root with an ITreeRootElement to enable runAtClient.
+Tags_TreeEncodingError=An IOException occured in URLEncoder.
+Tags_TreeStructureError=The structure of the Tree is invalid.  The following properties are requires on all TreeElements <b>{0}</b>.
+Tags_UnableToWriteTree=Unable to create the tree instance identified by the expression ''{0}''. Error:<br>{1}
+Tags_TreeInvalidAttribute=Invalid tree control attribute ''{0}''.
+Tags_TreeDataNodeNotUnique=TreeElement named ''{0}'' already belongs to this tree.
+Tags_DivPanelInvalidAttribute=Invalid DivPanelState attribute ''{0}''.
+Tags_UnableToWriteDivPanel=Unable to create the DivPanelState instance identified by the expression ''{0}''. Error:<br>{1}
+Tags_InvalidParameterParent=Parameter tag's parent must implement IUrlParams.
+Tags_InvalidParameterMapParent=ParameterMap tag's parent must implement IUrlParams.
+Tags_InvalidConfigurePopupParent=ConfigurePopup tag's parent must implement IHasPopupSupport.
+Tags_InvalidRetrievePopupOutputParent=RetrievePopupOutput tag's parent must be ConfigurePopup.
+Tags_ParameterMapNotAMap=Map expression for ParameterMap does not resolve to a java.util.Map.
+Tags_ParameterMapNotAnException=Map attribute of ParameterMap must be an expression.
+Tags_InvalidNodeParent=TreeItem's parent must be a Tree or another TreeItem.
+Tags_CannotFindInput=Could not find the page input at key {0} and scope {1}.
+Tags_CheckBoxGroupChildError=The CheckBox tag cannot be the child of a CheckBoxGroup, please use CheckBoxOption.
+Tags_CheckBoxOptionNoCheckBoxGroup=Could not find the CheckBoxGroup parent tag for the CheckBoxOption.
+Tags_SelectOptionNoSelect=Could not find the Select parent tag for the SelectOption.
+Tags_RadioButtonOptionNoRadioButtonGroup=Could not find the RadioButtonGroup parent tag for the RadioButtonOption.
+Tags_SelectOptionParentHasOptionsDataSource=The Select cannot both have SelectOptions and an OptionsDataSource, unless the Select is repeating.
+Tags_SelectRepeatingOptionType=A SelectOption must set the repeatingType property when appearing in the body of a repeating Select.
+Tags_OptionsDSIteratorError=Unable to create an Iterator on the optionsDataSource
+Tags_RadioOptionParentHasOptionsDataSource=The RadioButtonGroup cannot both have RadioButtonOptions and an OptionsDataSource, unless the RadioButtonGroup is repeating.
+Tags_CheckBoxOptionParentHasOptionsDataSource=The CheckBoxGroup cannot both have CheckBoxOptions and an OptionsDataSource, unless the CheckBoxGroup is repeating.
+Tags_NumberFormatWrongType=The NumberFormat type must be "number", "currency", or "percent".
+Tags_NoFormatPattern=The pattern of the Format must not be null or an empty string.
+Tags_FormatException=FormatError while formatting: {0}.
+Tags_NumberFormatPatternException=FormatNumber error applying pattern: {0}
+Tags_NumberFormatParseException=FormatNumber error parsing input: {0}
+Tags_DateFormatPatternException=FormatDate error creating SimpleDateFormat: {0}
+Tags_formatDate_String_Error=The String "{0}" is not in an understood date format.
+Tags_formatDate_StringPatternError=FormatDate error, the stringInputPattern "{0}" is invalid.  IllegalArgumentException: {1}
+Tags_FormattableParentRequired=Format tags require a parent that is Formattable.
+Tags_EmptyStringFormatException=The value to be formatted by the FormatNumber cannot be an empty string or null.
+Tags_BadParameterType=Parameter {0} cannot be a Map.
+Tags_URISyntaxException=URISyntaxException occured.
+Tags_ExpressionEvaluationFailure=Expression evaluation failed for ''{0}''.
+Tags_IsExpressionFailure=The string ''{0}'' is not an expression : {1}
+Tags_ExpressionEvaluationException=Caught exception evaluating expression ''{0}'': {1}.
+Tags_ExpressionQualifyingFailure=Expression qualifying failed for text ''{0}''.
+Tags_LabelExpressionNull=Label: expression {0} resolved to null, using empty string.
+Tags_ContentExpressionNull=Content: expression {0} resolved to null, using empty string.
+Tags_Node_InvalidNode=Invalid treeItem; it must have exactly one of {0}.
+Tags_TreeItemErrorNoInline=<span style='color:red'>An error occurred in a tree item that cannot be reported inline.  See above.</span>
+Tags_FormNoApplicationConfig=Could not locate the Form's application module configuration information.
+Tags_FormNameNoType=The Form must have a type attribute if it has a name attribute.
+Tags_FormNameBadType=The specified type of the Form was not a legal type.
+Tags_BindingUpdateError=Binding Update Failed for ''{0}'', cause: {1}
+Tags_BindingUpdateExpressionError=The expression ''{0}'' does not contains a valid expression and cannot be used for update.
+Tags_NoInPageErrorReporting=In-page error reporting is turned off, the following error occurred: {1}
+Tags_ClientReqScriptHeader=Setting runAtClient on the &lt;netui:html> tag requires a &lt;netui:scriptHeader> in the HTML &lt;head>.
+Tags_TreeHtmlRunAtClient=Setting runAtClient on the &lt;netui:tree> requires a &lt;netui:scriptHeader> included before the Tree.
+Tags_TreeRunAtClientSC=A runAtClient Tree must appear inside ScriptContainer.
+Tags_DivPanelHtmlRunAtClient=A DivPanel requires setting runAtClient on a ScriptContainer and a &lt;netui:scriptHeader> included in the ScriptContainer before the DivPanel.
+Tags_AttributeMayNotBeSet=The attribute "<b>{0}</b>" may not be set through the Attribute tag.
+Tags_AttributeNameNotSet=The paramater "<b>name</b>" may not be null or the empty string.
+Tags_AttributeFacetNotSupported=The facet "<b>{0}</b>" is not supported by this tag.
+Tags_AttributeInvalidParent=The parent tag of this "<b>attribute</b>" does not support dynamic attributes.
+Tags_BehaviorInvalidParent=The parent tag of this "<b>behavior</b>" does not support dynamic behaviors.
+Tags_BehaviorFacetNotSupported=The facet "<b>{0}</b>" is not supported by this tag.
+
+Tags_ButtonText=Click
+Tags_ButtonTypeError=The type of a button must be one of 'submit', 'button' or 'reset', found ''{0}''.
+Tags_FormMethodError=The value of a method must be one of 'post' or 'get', found ''{0}''.
+
+Tags_CaptionTableParent=A TableCaption must have a Table as parent.
+Tags_RowTableParent=A TableRow must have a Table or TableBody as parent.
+
+
+Tags_Image_Page_and_URL=Image tag with both a Page and URL specified, \
+page "{0}", url "{1}"
+Tags_Iteration_Error=Unable to create iterator for attribute <b>optionDataSource</b> of type "<b>{0}</b>"
+Tags_Anchor_URLException=URL Exception calculating the URL: {0}
+Tags_Anchor_ForwardError=URL Exception: {0}.  This may be caused because an ActionMapping cannot be found (the page was not accessed through an Action).
+Tags_Form_URLException=The action ''{0}'' for the Form is malformed: {1}
+Tags_Button_URLException=The action ''{0}'' for the Button is malformed: {1}
+Tags_Anchor_InvalidAnchorURI=The {0} URI is invalid; it must be exactly one of {1}
+Tags_Image_URLException=The src ''{0}'' for the Image is malformed: {1}
+Tags_Rollover_Image_URLException=The src ''{0}'' for the rollover Image is malformed: {1}
+Tags_RewriteURL_URLException=The url ''{0}'' for the RewriteURL is malformed: {1}
+Tags_Tree_Node_URLException=The action ''{0}'' for the tree node is malformed: {1}
+Tags_HRefEvalNull=The href expression "{0}" resolved to null.
+Tags_formatDate_Type_Error=The type "{0}" may not be formatted by a formatDate tag.
+Tags_LocaleRequiresLanguage=If you set a country, you must also set a language when specifying a local, defaulting to Locale of Request.  The country set was "{0}"
+Tags_ErrorsException=An error occurred accessing the message bundle.  This may be because the message-resource is not defined within the page flow.  The error: {0}
+Tags_ErrorsBundleMissing=An error occurred accessing the message bundle when looking for message key "{0}".  This may be because there is no default message bundle defined for the current page flow.
+Tags_ErrorsMessageMissing=Could not find a message for message key "{0}" in the default message bundle for the current page flow.
+Tags_ParameterRenderError=The parameter type [{0}] was not recognized as a valid type.
+Tags_ParameterAccessError=The parameter type [{0}] was not recognized as a valid type, attempting to access argument ''{1}''.
+Tags_DataSourceExpressionError=An error occurred converting the data source "{0}" into an expression; {1}
+Tags_FileMultiOff=The FileUpload tag may not be used because Multipart Request Handling is turned off for this WebApp.
+
+DataSourceError=The expression "<b>{0}</b>" is an invalid expression for a <b>dataSource</b>.  Expressions in a dataSource must bind to a single property.
+TreeRootError=The expression "<b>{0}</b>" is invalid. Cause: {1}
+OptionsDataSourceError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataSource</b>.  Expressions in a dataSource must bind to a single property.
+OptionsDataSourceEvalError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataSource</b> and could not be evaluated.  Cause: {1}
+DefaultValueError=The expression "<b>{0}</b>" could not be evaluated for the defaultValue attribute.  Cause: {1}
+OptionsDataAttributesError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataAttributes</b>.  Expressions in a optionsDataAttributes must bind to a single property.
+OptionsDataAttributesEvalError=The expression "<b>{0}</b>" is an invalid expression for an <b>optionsDataAttributes</b> and could not be evaluated.  Cause: {1}
+
+Tags_RepeaterStructure=A repeater component must be immediately nested within a Repeater tag.
+
+Tags_TreeAltText=Tree Node
+Tags_TreeAltTextCollapse=Collapse Tree Element
+Tags_TreeAltTextExpand=Expand Tree Element
+
+Tags_TemplateSectionMissing=No Sections defined, ''<b>{0}</b>'' not included in template.
+Tags_IteratorError=Unable to create Iterator for tag ''{0}'', attribute ''{1}'', expression ''{2}''.  The source may be null.
+Tags_TemplateContextMissing=No Template Context was found.  This may be because the template file was directly accessed.
+
+Expression_Error = Expression Error
+Tag_Error = Tag Error
+
+Tag_Header = \
+<span> \
+<table border="1" cellspacing="0" style="color:red;background-color:white">\n \
+<tr><th colspan="5">Tag Error</th></tr>\n \
+<tr><th>Tag</th><td>{0}</td>\n \
+    <th>Errors</th><td colspan="2">{1}</td></tr>\n \
+
+Tag_Footer = \
+</table></span>\n
+
+Expression_Error_Line = \
+<tr><th>{0}</th><th>Attribute</th><td>{1}</td>\n \
+    <th>Expression</th><td>{2}</td></tr>\n \
+<tr><th valign="top">Message</th><td colspan="4">{3}</td></tr>\n
+
+Tag_Error_Line = \
+<tr><th>{0}</th><th>Message</th><td colspan="3">{1}</td></tr>\n
+
+Inline_error = <span style="color:red;background-color:white">\n \
+[<b>{0}:{1}</b>, Found in tag <b>{2}</b>]</span>
+
+
+Footer_Error_Header = \
+<div> <hr />\
+<table border="1" cellspacing="0" style="color:red;background-color:white">\n \
+<tr><th colspan="6">Page Errors</th></tr>\n \
+<tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>\n
+
+Footer_Error_Footer = \
+</table></div>\n
+
+Footer_Error_Expr_Body = \
+<tr><th rowspan="2">{0}</th><th rowspan="2">{1}</th><th>Attribute</th><td>{2}</td>\n \
+    <th>Expression</th><td>{3}</td></tr>\n \
+<tr><th valign="top">Message</th><td colspan="3">{4}</td></tr>\n
+
+Footer_Error_Tag_Body = \
+<tr><th>{0}</th><th>{1}</th><th>Message</th><td>{2}</td></tr>\n
+
+
+PageFlow_UnresolvableForwardException_Page= \
+<html><head><title>Page Flow Error - Unresolvable Forward</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Unresolvable Forward</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Unable to find a forward named <b>{0}</b> on action <b>{1}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_UnresolvableForwardException_Message= \
+Unable to find a forward named \"{0}\" on action {1} in page flow {2}.
+
+PageFlow_IllegalActionOutputException_Page= \
+<html><head><title>Page Flow Error - Illegal Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The forward <b>{0}</b> has at least one action output (<b>{3}</b>), but is set to redirect="true".  \n \
+    Page inputs may not be used on redirect forwards.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalActionOutputException_Message= \
+The forward "{0}" on action {1} in page flow {2} has at least one action output ("{3}"), but is \
+set to redirect="true".  Page inputs may not be used on redirect forwards.
+
+PageFlow_MissingActionOutputException_Page= \
+<html><head><title>Page Flow Error - Missing Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Missing Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{3}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action Output:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The required action output <b>{0}</b> was not present on forward <b>{1}</b>.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_MissingActionOutputException_Message= \
+The required action output "{0}" was not present on forward "{1}" (action {2} in Page Flow {3}).
+                             
+PageFlow_MismatchedActionOutputException_Page= \
+<html><head><title>Page Flow Error - Mismatched Action Output</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Mismatched Action Output</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{3}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action Output:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The action output <b>{0}</b> is of type <b>{4}</b>, but was declared to expect type <b>{5}</b>.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_MismatchedActionOutputException_Message= \
+The action output "{0}" on forward "{1}" (action {2} in Page Flow {3}) is of type {4}, but was declared to expect type {5}.
+
+PageFlow_IllegalRedirectOutputFormException_Page= \
+<html><head><title>Page Flow Error - Illegal Output Form on Redirect</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Output Form on Redirect</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+The forward "{0}" on action {1} in page flow {2} has at least one output form (type {3}), but is\n \
+set to redirect="true".  Output forms may not be used on redirect forwards.\n \
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalRedirectOutputFormException_Message= \
+The forward "{0}" on action {1} in page flow {2} has at least one output form (type {3}), but is \
+set to redirect="true".  Output forms may not be used on redirect forwards.
+
+PageFlow_IllegalOutputFormTypeException_Page= \
+<html><head><title>Page Flow Error - Illegal Output Form Type</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Illegal Output Form Type</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Forward:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">\n \
+    The forward "{0}" on action {1} in page flow {2} has a first output form of type {3}, but is\n \
+    declared to require type {4}.
+</span>\n \
+</body></html>\n
+
+PageFlow_IllegalOutputFormTypeException_Message= \
+The forward "{0}" on action {1} in page flow {2} has a first output form of type {3}, but is\n \
+declared to require type {4}.
+
+PageFlow_NotLoggedInException_Page= \
+<html><head><title>Page Flow Error - Not Logged In</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Not Logged In</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires a current user, but there is no logged-in user.</span>\n \
+</body></html>\n
+
+PageFlow_NotLoggedInException_Message= \
+Action {0} in page flow {1} requires a current user, but there is no logged-in user.
+
+PageFlow_SessionExpiredException_Page= \
+<html><head><title>Page Flow Error - Session Expired</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Session Expired</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> cannot be completed because the user session has expired.</span>\n \
+</body></html>\n
+
+PageFlow_SessionExpiredException_Message= \
+Action {0} in page flow {1} cannot be completed because the user session has expired.
+
+PageFlow_ControlFieldInitializationException_Page= \
+<html><head><title>Page Flow Error - Control Field Initialization</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Control Field Initialization</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Control Container:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Control Field:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Exception occurred while initializing control field <b>{0}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_ControlFieldInitializationException_Message= \
+Exception occurred while initializing control field {0} in {1}.
+
+PageFlow_LoginExpiredException_Page= \
+<html><head><title>Page Flow Error - Login Expired</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Login Expired</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires a current user, but there is no logged-in user. \n \
+   This may be due to an expired session.</span>\n \
+</body></html>\n
+
+PageFlow_LoginExpiredException_Message= \
+Action {0} in page flow {1} requires a current user, but there is no logged-in user. \
+This may be due to an expired session.
+
+PageFlow_UnfulfilledRolesException_Page= \
+<html><head><title>Page Flow Error - Unsatisfied Role Restriction</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Unsatisfied Role Restriction</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Action <b>{0}</b> requires the user to be in one of the following roles: {2}.</span>\n \
+</body></html>\n
+
+PageFlow_UnfulfilledRolesException_Message= \
+Action {0} in page flow {1} requires the user to be in one of the following roles: {2}.
+
+PageFlow_UnfulfilledRolesException_ResponseMessage = User is not authorized to access action {0}.
+
+PageFlow_NoMatchingActionMethodException_Page= \
+<html><head><title>Page Flow Error - No Matching Action Method</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Matching Action Method</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Form:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Could not find matching action method for action=<b>{0}</b>, form=<b>{1}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_NoMatchingActionMethodException_Message= \
+Could not find matching action method for action={0}, form={1} in page flow {2}.
+
+PageFlow_NoFormString = [none]
+
+PageFlow_NoCurrentPageFlowException_Page= \
+<html><head><title>Page Flow Error - No Current Page Flow</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Current Page Flow</h1>\n \
+<span style="color:red">You have tried to return to a recent page or action in the current page flow \
+through return-to=\"{0}\" from action <b>{1}</b>, but there is no current page flow.  This can happen \
+when you have modified files and caused the web application to be redeployed, or when the session \
+expires.  Please restart the sequence again.</span>\n \
+</body></html>\n
+
+PageFlow_NoCurrentPageFlowException_Message = No current page flow for return-to=\"{0}\" on action {1}.
+
+PageFlow_NoPreviousPageException_Page= \
+<html><head><title>Page Flow Error - No Relevant Page</title></head>\n \
+<body>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<h1>Page Flow Error - No Relevant Page</h1>\n \
+<span style="color:red">You have tried to return to a recent page in the current page flow \
+through return-to=\"{0}\", but there is no appropriate page.</span>\n \
+</body></html>\n
+
+PageFlow_NoPreviousPageException_Message = No relevant page for return-to=\"{0}\" on action {1} in page flow {2}.
+
+PageFlow_NoPreviousActionException_Page= \
+<html><head><title>Page Flow Error - No Previous Action</title></head>\n \
+<body>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{2}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<h1>Page Flow Error - No Previous Action</h1>\n \
+<span style="color:red">You have tried to return to a recent action in the current page flow \
+through return-to=\"{0}\", but there is no appropriate action.</span>\n \
+</body></html>\n
+
+PageFlow_NoPreviousActionException_Message = No previous action for return-to=\"{0}\" on action {1} in page flow {2}.
+
+PageFlow_InfiniteReturnToActionException_Page= \
+<html><head><title>Page Flow Error - Return to Same Action</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Return to Same Action</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">You have tried to return to the most recent action (<b>{0}</b>) in the current \
+page flow through return-to=\"action\", but the current action is the same as the previous action.  The flow \
+has been terminated to avoid an infinite loop.</span>\n \
+</body></html>\n
+
+PageFlow_InfiniteReturnToActionException_Message= \
+Infinite loop of return-to=\"action\" for action {0} in page flow {1}.
+
+PageFlow_EmptyNestingStackException_Page= \
+<html><head><title>Page Flow Error - No Nesting Page Flow</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - No Nesting Page Flow</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Nested Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Returned Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">You have returned from a nested page flow, but there is no current page flow \
+on the stack.  This can happen in iterative development mode when you have modified files and caused \
+the web application to be redeployed, or when the session expires.  Please restart the nesting sequence \
+again.</span>\n \
+</body></html>\n
+
+PageFlow_EmptyNestingStackException_Message = Empty nesting stack for returned action {0} from page flow {1}.
+
+PageFlow_ActionNotFoundException_Page= \
+<html><head><title>Page Flow Error - Action Not Found</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Action Not Found</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Form:</b></td><td>{2}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">Unable to find matching action <b>{0}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_ActionNotFoundException_Message= \
+Unable to find matching action {0} (form={2}) in page flow {1}.
+
+PageFlow_DoubleSubmitException_Page= \
+<html><head><title>Page Flow Error - Double Submit</title></head>\n \
+<body>\n \
+<h1>Page Flow Error - Submit</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Page Flow:</b></td><td>{1}</td></tr>\n \
+<tr><td><b>Action:</b></td><td>{0}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">A double-submit occurred for action <b>{0}</b>.</span>\n \
+</body></html>\n
+
+PageFlow_DoubleSubmitException_Message= \
+A double-submit occurred for action <b>{0}</b> in page flow {1}.
+
+PageFlow_UnhandledException_Page = \
+<html><head><title>Page Flow Unhandled Exception</title></head>\n \
+<body>\n \
+<h1>Page Flow Unhandled Exception</h1>\n \
+<table border="1" cellspacing="0">\n \
+<tr><td><b>Exception:</b></td><td>{0}</td></tr>\n \
+<tr><td><b>Message:</b></td><td>{1}</td></tr>\n \
+</table><br />\n \
+<span style="color:red">A <b>{0}</b> exception was thrown and not handled by any page flow. See the log for the exception stack trace.</span>\n \
+</body></html>\n
+
+PageFlow_UnhandledException_Message = A {0} exception was thrown and not handled by any page flow.
+
+PageFlow_CompileErrorHeader= \
+<html><head><title>Page Flow Compile Error</title></head>\n \
+<body>\n \
+<h1>Page Flow Compile Error</h1>\n \
+<span style="color:red">Compilation of {0} failed.</span>\n \
+<p />\n \
+<table border="1" cellspacing="0" cellpadding="15">\n
+
+PageFlow_CompileErrorItem= \
+<tr><td>{7} at line {0} column {1}, file <i>{2}</i>:<pre>{3}\n{4}</pre>Description: <b>{5}</b><br /><i>{6}</i></td></tr>\n \
+
+PageFlow_CompileErrorFooter= \
+</table><br />\n \
+</body></html>\n
+
+PageFlow_CompileErrorHeaderConsole= \
+--------------------------------------------------------------------------------\n\
+Page Flow Compile Warnings for file {0}\n\n
+
+PageFlow_CompileErrorItemConsole= \
+{7} at line {0} column {1}, file {2}:\n{3}\n{4}\nDescription: {5}\n{6}\n
+
+PageFlow_CompileErrorFooterConsole= \
+--------------------------------------------------------------------------------
+
+PageFlow_Error=Error
+PageFlow_Warning=Warning
+PageFlow_Info=Info
+
+PageFlow_OverlappingError_1 = PageFlows {0}
+PageFlow_OverlappingError_2 = , {0}
+PageFlow_OverlappingError_3 = and {0} may not coexist in directory {1}.
+PageFlow_IllegalStateGet = {0} was called outside of a valid context.
+
+PageFlow_WrongPath_Page= \
+<html><head><title>Page Flow - Wrong Path</title></head>\n \
+<body>\n \
+<h1>Page Flow - Wrong Path</h1>\n \
+Page Flow <b>{0}</b> was requested, but the page flow for the directory is <b>{1}</b>.\n \
+</body></html>\n
+
+PageFlow_WrongPath_Message = Page Flow {0} was requested, but the page flow for the directory is {1}.
+
+PageFlow_NoModuleConf_Page= \
+<html><head><title>Missing Struts Module Configuration</title></head>\n \
+<body>\n \
+<h1>Missing Struts Module Configuration</h1>\n \
+There is no Struts module configuration registered for <b>{0}</b> (module path <b>{1}</b>).\n \
+</body></html>\n
+
+PageFlow_NoModuleConf_Message= \
+There is no Struts module configuration registered for {0} (module path "{1}").
+
+PageFlow_LoginFailed=Login failed for user {0}.
+
+PageFlow_MissingExceptionHandler=Could not find exception handler method <b>{0}</b>.
+PageFlow_MissingExceptionHandlerWithForm= \
+Could not find exception handler method <b>{0}</b> that accepts a form of type <b>{1}</b>.
+
+PageFlow_Custom_Error_Page = <html><title>PageFlow Error</title><body>PageFlow <b>{0}</b>: {1}</body></html>\n
+PageFlow_Custom_Error_Message = Error in PageFlow {0}: {1}
+
+PageFlow_Forward_Overflow_Page = \
+<html><head><title>Forward Overflow</title></head>\n \
+<body>\n \
+<h1>PageFlow - Forward Overflow</h1>\n \
+<span style="color:red">More than {0} server forwards have been executed during the given request, and \
+the flow has been terminated to avoid an infinite loop.  The URI of the most recent forward was {1}. \
+</body></html>\n
+
+PageFlow_Forward_Overflow_Message = \
+More than {0} server forwards have been executed during the given request, and \
+the flow has been terminated to avoid an infinite loop.  The URI of the most recent forward was {1}.
+
+PageFlow_Nesting_Overflow_Page = \
+<html><head><title>Forward Overflow</title></head>\n \
+<body>\n \
+<h1>PageFlow - Forward Overflow</h1>\n \
+<span style="color:red">{0} page flows have been nested, and this number exceeds the nesting \
+maximum of {1}.  The nesting stack has been cleared. \
+</body></html>\n
+
+PageFlow_Nesting_Overflow_Message = \
+{0} page flows have been nested, and this number exceeds the nesting maximum of {1}.  \
+The nesting stack has been cleared.
+
+PageFlow_Struts_MissingModuleConfig = Could not load Struts module configuration for {0}.
+PageFlow_Struts_ModuleParseError = Error parsing Struts module configuration for {0}.
+
+#template servlet exception
+TempLog_ServletError=Servlet Exception occured include template: {0}, message: {1}
+Temp_SectionInRepeater=Sections inside of a Repeater must be inside a div panel
+Temp_RequestDispatcherReturnNull=The RequestDispatcher returned a null for URI [{0}]
+
+# Template Logging Strings
+TempLog_ServletException=Servlet Exception occured including template: {0}
+TempLog_Cause=Cause: Exception [{0}] Message [{1}]
+TempLog_AssertCause: Assert\n{0}
+
+# Template Exception Strings
+TempExcp_ExceptIncludeTemplate=Exception [{0}] including template [{1}]
+TempExcp_ExceptIncludeDefault=Exception [{0}] including the template default [{1}]
+TempExcp_Except=Exception [{0}] {1}
+TempExcp_WritingContent=Writing Section content
+
+TempExcp_MissingTemplate=Template file [{0}] was not found.
+TempExcp_MissingDefaultPage=The defaultPage file [{0}] was not found.
+TempExcp_ContainedTemplate=The Template tag may not be nested within another tag.  It should be the top level tag, without content before or after it.
+
+# Error messages for ProcessPopulate
+ExprUpdateError=NetUI Warning: Unable to update expression "{0}".  The typical cause is that the object represented by the expression is not available or is the wrong type for updating.  Cause: {1}
+
+#
+# NetUI Databinding Tag Strings
+#
+Tags_AbstractCallMethod_noSuchObjectException=An exception occurred finding the object named \"{0}\" on which to invoke the method \"{1}\".  Cause: {2}
+Tags_AbstractCallMethod_objectIsNull=The object named \"{0}\" on which to invoke the method \"{1}\" was not found.
+Tags_AbstractCallMethod_noSuchMethod=Could not find operation \"{0}\" with {1} parameter(s) on the {2}.
+Tags_AbstractCallMethod_noSuchMethodWithTypes=Could not find operation \"{0}\" with {1} parameter(s) of type(s) {2} on the {3}.
+Tags_AbstractCallMethod_invocationError=Could not invoke method \"{0}\" on the object named \"{1}\" because: {2}
+Tags_AbstractCallMethod_parameterError=The argument of type \"{0}\" in position \"{1}\" with value \"{2}\" could not be created with the error: {3}
+Tags_CellRepeater_intTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than zero.
+Tags_CellRepeater_missingRowOrColumn=Both the rows and columns attributes must be greater than zero.
+Tags_CellRepeater_invalidRowOrColumn=At least one of the 'rows' and 'columns' attributes must be set to a valid number
+Tags_CellRepeater_invalidRowValue=The 'rows' attribute for the {0} is ''{1}'' and must be greater than zero.
+Tags_CellRepeater_invalidColumnValue=The 'columns' attribute for the {0} is ''{1}'' and must be greater than zero.
+Tags_CallMethod_defaultObjectName=referenced object
+Tags_CallPageFlow_defaultObjectName=current page flow
+Tags_CallMethod_objectNotFoundException=Could not find a control with the name \"{0}\".  Reason: {1}
+Tags_CallPageFlow_noPageFlow=Could not find a current page flow.
+Tags_DeclareBundle_invalidName=The name attribute is \"{0}\" and must be a String with length greater than zero.
+Tags_DeclareBundle_invalidResourcePath=The resourcePath attribute is \"{0}\" and must be a String that references a Java properties file.
+Tags_DeclareBundle_wrongContextType=The PageContext contains an attribute under the BundleContex key of the wrong type \"{0}\".  This object must be removed before the bundle binding context can be enabled.
+Tags_DeclareBundle_invalidLocaleOverride=The locale override specification is not valid; check the language, country, and variant attributes.  In order to declare a variant, a variant requires boty language and country; a country requires a language.  Current values language={0} country={1} variant={2}.
+Tags_DeclareBundle_defaultIsReservedWord=The name \"default\" is not a valid name for a declared bundle; it is reserved for reference to the default message-resources file for the current page flow.
+Tags_DataAccessProvider_metadataUnsupported=The {0} does not export metadata for its iterated items.
+Tags_DeclarePageInput_EmptyName=The name attribute of the declarePageInput tag can not be an empty string.
+Tags_DeclarePageInput_EmptyType=The type attribute of the declarePageInput tag can not be an empty string.
+Tags_DeclarePageInput_Required=The page input "{0}" is required for this page and was not found.
+Tags_GetData_valueExpressionError=The expression "<b>{0}</b>" is an invalid expression for the <b>value</b> attribute.  Expressions in the value attribute must bind to a single object.
+Tags_MethodParameter_invalidParent=The MethodParamter tag must be directly contained inside of a CallControl, CallPageFlow, or ChoiceMethod tag.
+Tags_MethodParameter_undefinedValue=The MethodParameter tag must have either the isNull attribute set to true or the value attribute set to a valid value.";
+Tags_Pad_intTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than zero.
+Tags_Pad_minRepeatIntTooSmall=Can not use a value of \"{0}\" for the field \"{1}\"; the value must be greater than or equal to zero.
+Tags_Pad_minGreaterThanMax=The value of maxRepeat ({0}) must be greater than the value of minRepeat ({1}).
+Tags_Repeater_nullIterator=The data structure from which to create an iterator is null.
+Tags_RepeaterItem_invalidChoiceTags=The RepeaterItem choice feature requires at least one Choice tag and exactly one ChoiceMethod tag to be present in the RepeaterItem's body.
+Tags_RepeaterItem_invalidChoiceMethod=The RepeaterItem's choice feature requires exactly one ChoiceMethod tag.
+Tags_RepeaterComponent_startTagError=An exception occurred when rendering the startTag of the tag \"{0}\" because: {1}
+Tags_RepeaterComponent_endTagError=An exception occurred when rendering the endTag of the tag \"{0}\" because: {1}
+Tags_RepeaterComponent_invalidParent=A tag of type \"{0}\" must be nested within a tag of type \"{1}\"
+
+#
+# Data Grid Strings
+#
+DataGridStateFactory_nullDataGridConfig=Unable to create a DataGridCodec with a null DataGridConfig
+PagerModel_IllegalDefaultPageSize=Illegal default page size; the default page size must be greater than zero.
+PagerModel_IllegalPageSize=Can not set a page size that is less than one.
+PagerModel_IllegalPage=Can not set the current page to a value less than zero.
+PagerModel_IllegalRow=Can not set the current row to a value less than zero.
+PagerModel_CantCalculateLastPage=Unable to calculate the last page for the pager.  The size of the data set is unknown.
+CellModel_FormatterThrewException=A formatter of type \"{0}\" threw an exception {1}
+DataGridTagModel_InvalidStateTransition=Unable to make the specified render state transition
+Rendering_URLException=Exception creating URL with href {0} and action {1}
+DataGridStateCodec_IllegalIntegerValue=Invalid integer value \"{0}\".  Cause: {1}
+DataGridStateCodec_IllegalFilter=The syntax of the filter \"{0}\" is illegal.
+DataGridURLBuilder_UnableToMergeValues=Can not merge values into the type: {0}
+SortStrategy_InvalidSortDirection=Found invalid sort direction \"{0}\"
+DataGridUtil_CantCreateClass=Can not create an instance of a null class
+DataGridUtil_CantInstantiateClass=Unable to extend data grid.  Can't instantiate extension class.  Cause: {0}
+DataGridUtil_InvalidParentClass=Invalid data grid extension.  The class \"{0}\" is not a subclass or sub interface of \"{1}\"
+DataGridUtil_IllegalJspContext=Can not create a PageContext from a JspContext of type: {0}
+DataGridTags_MissingDataGridModel=Unable to find a dataGridModel in the JspContext
+ConfigurePager_CantCreateCustomPagerRenderer=Unable to create custom pager renderer.  Cause: {0}
+ConfigurePager_UnsupportedPagerFormat=The pagerFormat \"{0}\" is not supported
+ConfigurePager_CantSetHrefAndAction=The configurePager tag can't set both the pageAction and pageHref attributes
+HeaderCell_CantSetHrefAndAction=Can not set both the filter action and href attributes
+HeaderCell_CantSetSortHrefAndAction=Can not set both the sort action and href attributes
+HeaderCell_CantEnableSorting=Can not enable sorting on a column with a null sort expression
+HeaderCell_CantEnableFiltering=Can not enable filtering on a column with a null filter expression
+DataGridFilter_NoFilterOperation=Can not determine the operation for a filter with filter expression \"{0}\"
+DataGridFilter_UnknownFilterOperation=Can not include the filter with operation \"{0}\" in a SQL statement; the operation is unknown
+FilterTypeHint_UnknownHintString=The filter type hint \"{0}\" is not recognized as a valid type hint
+
+#
+# Utility Strings
+#
+ArrayIterator_notAnArray=Can not create an array iterator from an object that is not an array
+ArrayIteator_arrayError=An error occurred while getting the next element from an array of type {0}
+IteratorFactory_Iterator_noSuchElement=No more elements in the Iterator.
+IteratorFactory_Iterator_removeUnsupported=Type {0} does not support the remove() operation.
+ProcessPopulate_handler_nonAtomicExpression=The expression \"{0}\" is not an atomic expression.
+ProcessPopulate_handler_notRegistered=A handler with the name \"{0}\" has not been registered.
+ProcessPopulate_exprUpdateError=Caught exception processing request parameter \"{0}\" during expression update.  Cause: {1}
+TypeUtils_nullType=Can not convert an object into a null type.
+TypeUtils_noConverterForType=Could not find a TypeConverter for converting a String to an object of type \"{0}\"
+TypeUtils_javaUtilDateConvertError=Caugnt an error converting a String to a DateFormat.SHORT formatted Date: {0}
+TypeUtils_javaSqlDateConvertError=Caught an error converting a String to a java.sql.Date: {0}
+TypeUtils_javaSqlTimestampConvertError=Caught an error converting a String to a java.sql.Timestamp: {0}
+TypeUtils_javaSqlTimeConvertError=Caught an error converting a String to a java.sql.Time: {0}
+URLCodec_encodeException=Caught exception encoding a String.  Cause: {0}
+URLCodec_decodeException=Caught exception decoding a String.  Cause: {0}
\ No newline at end of file

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/BaseTypeConverter.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/BaseTypeConverter.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/BaseTypeConverter.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/BaseTypeConverter.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.type;
+
+import java.util.Locale;
+
+/**
+ * Default implementation of the {@link TypeConverter} interface.
+ */
+public class BaseTypeConverter {
+
+    /**
+     * Convert the String to a type, optinally using the given locale.
+     */
+    public Object convertToObject(Class type, String value, Locale locale) {
+        return value;
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/DelegatingTypeConverter.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/DelegatingTypeConverter.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/DelegatingTypeConverter.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/DelegatingTypeConverter.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.type;
+
+import java.util.Locale;
+
+/**
+ * Implementation of the {@link TypeConverter} interface that delegates
+ * to a {@link TypeConverter} implementation which doesn't extend
+ * {@link BaseTypeConverter}.
+ */
+public final class DelegatingTypeConverter
+        extends BaseTypeConverter {
+
+    private TypeConverter _converter = null;
+
+    public DelegatingTypeConverter(TypeConverter converter) {
+        super();
+        assert converter != null;
+        _converter = converter;
+    }
+
+    public Object convertToObject(Class type, String value, Locale locale) {
+        return _converter.convertToObject(value);
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConversionException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConversionException.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConversionException.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConversionException.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.type;
+
+/**
+ * A TypeConversionException is thrown when an error has occurred performing
+ * a type conversion in the {@link TypeUtils} class.
+ */
+public class TypeConversionException
+        extends RuntimeException {
+
+    private String _localizedMessage = null;
+
+    /**
+     * Construct a TypeConversionException.
+     */
+    public TypeConversionException() {
+        super();
+    }
+
+    /**
+     * Construct a TypeConversionException.
+     *
+     * @param message message describing the error
+     */
+    public TypeConversionException(String message) {
+        super(message);
+    }
+
+    /**
+     * Construct a TypeConversionException.
+     *
+     * @param cause Throwable related to the cause of this exception
+     */
+    public TypeConversionException(Throwable cause) {
+        super(cause);
+    }
+
+    /**
+     * Construct a TypeConversionException.
+     *
+     * @param message message describing the error
+     * @param cause   Throwable related to the cause of this exception
+     */
+    public TypeConversionException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Set a localized message describing the cause of this exception.
+     *
+     * @param localizedMessage a localized message
+     */
+    public void setLocalizedMessage(String localizedMessage) {
+        _localizedMessage = localizedMessage;
+    }
+
+    /**
+     * Get a localized message describing the cause of this exception.
+     *
+     * @return a localized message string
+     */
+    public String getLocalizedMessage() {
+        return (_localizedMessage != null ? _localizedMessage : getMessage());
+    }
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverter.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverter.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverter.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverter.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.type;
+
+/**
+ * Interface used to define converters for converting Strings into various
+ * Object types.
+ */
+public interface TypeConverter {
+
+    /**
+     * Convert a String to an Object type
+     *
+     * @param value the String value to convert
+     * @return the converted object
+     */
+    public Object convertToObject(String value);
+}

Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverterNotFoundException.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverterNotFoundException.java?rev=240168&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverterNotFoundException.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/type/TypeConverterNotFoundException.java Thu Aug 25 22:46:03 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ * $Header:$
+ */
+package org.apache.ti.util.type;
+
+/**
+ *
+ */
+public class TypeConverterNotFoundException
+        extends RuntimeException {
+
+    private String _localizedMessage = null;
+
+    public TypeConverterNotFoundException() {
+        super();
+    }
+
+    public TypeConverterNotFoundException(String message) {
+        super(message);
+    }
+
+    public TypeConverterNotFoundException(String message, Throwable t) {
+        super(message, t);
+    }
+
+    public TypeConverterNotFoundException(Throwable t) {
+        super(t);
+    }
+
+    public void setLocalizedMessage(String localizedMessage) {
+        _localizedMessage = localizedMessage;
+    }
+
+    public String getLocalizedMessage() {
+        return _localizedMessage != null ? _localizedMessage : getMessage();
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org