<fileset dir="lib">
<include name="*.jar"/>
</fileset>
+ <fileset dir="lib/struts">
+ <include name="*.jar"/>
+ </fileset>
<fileset dir="lib/hibernate">
<include name="*.jar"/>
</fileset>
<exclude name="ant.jar"/>
<exclude name="xerces.jar"/>
</fileset>
- <fileset dir="lib/hibernate">
- </fileset>
+ <fileset dir="lib/hibernate"/>
+ <fileset dir="lib/struts"/>
</copy>
</target>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+\r
+\r
+<!--\r
+ DTD for the Struts Application Configuration File, Version 1.0\r
+\r
+ To support validation of your configuration file, include the following\r
+ DOCTYPE element at the beginning (after the "xml" declaration):\r
+\r
+ <!DOCTYPE struts-config PUBLIC\r
+ "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"\r
+ "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">\r
+\r
+ $Id: struts-config_1_0.dtd,v 1.5 2001/06/02 18:20:47 craigmcc Exp $\r
+-->\r
+\r
+\r
+<!-- ========== Defined Types ============================================= -->\r
+\r
+\r
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,\r
+ and also serves as the name of the corresponding scripting variable\r
+ and the name of the JSP attribute under which the bean is accessed.\r
+ Therefore, it must conform to the rules for a Java identifier.\r
+-->\r
+<!ENTITY % BeanName "CDATA">\r
+\r
+\r
+<!-- A "Boolean" is the string representation of a boolean (true or false)\r
+ variable.\r
+-->\r
+<!ENTITY % Boolean "(true|false|yes|no)">\r
+\r
+\r
+<!-- A "ClassName" is the fully qualified name of a Java class that is\r
+ instantiated to provide the functionality of the enclosing element.\r
+-->\r
+<!ENTITY % ClassName "CDATA">\r
+\r
+\r
+<!-- An "Integer" is a character string consisting solely of numeric digits,\r
+ optionally preceeded by a minus sign, that can be converted to a\r
+ 32-bit integer.\r
+-->\r
+<!ENTITY % Integer "CDATA">\r
+\r
+\r
+<!-- A "Location" is a relative path, delimited by "/" characters, that\r
+ defines the location of a resource relative to the location of the\r
+ Struts configuration file itself.\r
+-->\r
+<!ENTITY % Location "#PCDATA">\r
+\r
+\r
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with\r
+ a lower case letter and contain only characters that are legal in a\r
+ Java identifier.\r
+-->\r
+<!ENTITY % PropName "CDATA">\r
+\r
+\r
+<!-- A "RequestPath" is a context-relative URI path, beginning with a slash,\r
+ that identifies a mapped resource (such as a JSP page or a servlet)\r
+ within this web application.\r
+-->\r
+<!ENTITY % RequestPath "CDATA">\r
+\r
+\r
+<!-- The name of a JSP bean scope within which such a form bean may be\r
+ accessed.\r
+-->\r
+<!ENTITY % RequestScope "(request|session)">\r
+\r
+\r
+<!-- ========== Top Level Elements ======================================== -->\r
+\r
+\r
+<!-- The "struts-config" element is the root of the configuration file\r
+ hierarchy, and contains nested elements for all of the other\r
+ configuration settings.\r
+-->\r
+<!ELEMENT struts-config (data-sources?, form-beans?, global-forwards?, action-mappings?)>\r
+<!ATTLIST struts-config id ID #IMPLIED>\r
+\r
+\r
+<!-- The "data-sources" element describes a set of JDBC 2.0 Standard Extension\r
+ data source objects which will be configured according to the nested\r
+ "data-source" elements found inside.\r
+-->\r
+\r
+<!ELEMENT data-sources (data-source*)>\r
+<!ATTLIST data-sources id ID #IMPLIED>\r
+\r
+\r
+<!-- The "data-source" element describes a JDBC 2.0 Standard Extension data\r
+ source object (that implements javax.sql.DataSource) which will be\r
+ configured according to the properties and nested elements found here,\r
+ and made available as a servlet context attribute (i.e. application\r
+ scope bean). The following attributes are required:\r
+\r
+ key Servlet context attribute key under which this data\r
+ source will be stored. Default is the value specified\r
+ by string constant Action.DATA_SOURCE_KEY.\r
+\r
+ type Fully qualified Java class name of the implementation\r
+ class (must implement javax.sql.DataSource). Default\r
+ value is 'org.apache.struts.util.GenericDataSource'.\r
+\r
+ NOTE: The following attributes are defined by the default data source\r
+ implementation, and only take effect for that class or subclasses of\r
+ that class.\r
+\r
+ WARNING: The use of these attributes is deprecated. You should use\r
+ nested <set-property> elements to configure *all* properties of\r
+ your data source implementation.\r
+\r
+ autoCommit The default auto-commit state for newly created\r
+ connections.\r
+\r
+ description The description of this data source.\r
+\r
+ driverClass The Java class name of the JDBC driver to be used.\r
+ [REQUIRED]\r
+\r
+ loginTimeout The maximum number of seconds to wait for a connection\r
+ to be created or returned. Default is driver dependent.\r
+\r
+ maxCount The maximum number of connections to be created.\r
+\r
+ minCount The minimum number of connections to be created.\r
+\r
+ password The database password to use when connecting. [REQUIRED]\r
+\r
+ readOnly The default read-only state for newly created\r
+ connections.\r
+\r
+ url The JDBC URL to use when connecting. [REQUIRED]\r
+\r
+ user The database username to use when connecting. [REQUIRED]\r
+\r
+-->\r
+<!ELEMENT data-source (set-property*)>\r
+<!ATTLIST data-source id ID #IMPLIED>\r
+<!ATTLIST data-source key %BeanName; #IMPLIED>\r
+<!ATTLIST data-source type %ClassName; #IMPLIED>\r
+<!-- All of the following attributes are deprecated. Use a nested -->\r
+<!-- set-property element to configure data source properties. -->\r
+<!ATTLIST data-source autoCommit %Boolean; #IMPLIED>\r
+<!ATTLIST data-source description CDATA #IMPLIED>\r
+<!ATTLIST data-source driverClass %ClassName; #IMPLIED>\r
+<!ATTLIST data-source loginTimeout %Integer; #IMPLIED>\r
+<!ATTLIST data-source maxCount %Integer; #IMPLIED>\r
+<!ATTLIST data-source minCount %Integer; #IMPLIED>\r
+<!ATTLIST data-source password CDATA #IMPLIED>\r
+<!ATTLIST data-source readOnly %Boolean; #IMPLIED>\r
+<!ATTLIST data-source url CDATA #IMPLIED>\r
+<!ATTLIST data-source user CDATA #IMPLIED>\r
+\r
+\r
+<!-- The "form-beans" element is the root of the set of form bean descriptors\r
+ for this application. The following attributes are defined:\r
+\r
+ type Fully qualified Java class name of the implementation\r
+ class used for ActionFormBean objects. DEPRECATED.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "formBean" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT form-beans (form-bean*)>\r
+<!ATTLIST form-beans id ID #IMPLIED>\r
+<!ATTLIST form-beans type %ClassName; "org.apache.struts.action.ActionFormBean">\r
+\r
+\r
+<!-- The "form-bean" element describes a particular form bean, which is a\r
+ JavaBean that implements the org.apache.struts.action.ActionForm\r
+ class. The following attributes are defined:\r
+\r
+ className Fully qualified Java class name of the ActionFormBean\r
+ implementation class to use. Defaults to the value\r
+ configured as the "formBean" initialization parameter\r
+ to the Struts controller servlet.\r
+\r
+ name Unique identifier of this bean, used to reference it\r
+ in corresponding action mappings.\r
+\r
+ type Fully qualified Java class name of the implementation\r
+ class to be used or generated\r
+-->\r
+<!ELEMENT form-bean (icon?, display-name?, description?, set-property*)>\r
+<!ATTLIST form-bean id ID #IMPLIED>\r
+<!ATTLIST form-bean className %ClassName; #IMPLIED>\r
+<!ATTLIST form-bean name %BeanName; #REQUIRED>\r
+<!ATTLIST form-bean type %ClassName; #REQUIRED>\r
+\r
+\r
+<!-- The "global-forwards" element configures the global mappings of logical\r
+ names (used within the application) to mappable resources (identified\r
+ by context-relative URI paths). A global "forward" with a particular name\r
+ can be locally overridden by defining a "forward" of the same name within\r
+ an "action" element. The following attribute are defined:\r
+\r
+ type Fully qualified Java class name of the implementation\r
+ class used for ActionForward objects. DEPRECATED.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "forward" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT global-forwards (forward*)>\r
+<!ATTLIST global-forwards id ID #IMPLIED>\r
+<!ATTLIST global-forwards type %ClassName; "org.apache.struts.action.ActionForward">\r
+\r
+\r
+<!-- The "forward" element describes a mapping of a logical name (used within\r
+ the application) to a mappable resource identified by a context-relative\r
+ URI path. The following attributes are defined:\r
+\r
+ className Fully qualified Java class name of the ActionForward\r
+ implementation class to use. Defaults to the value\r
+ configured as the "forward" initialization parameter\r
+ to the Struts controller servlet.\r
+\r
+ name Unique identifier of this forward, used to reference it\r
+ in application action classes.\r
+\r
+ path The context-relative path of the mapped resource.\r
+\r
+ redirect Set to "true" if sendRedirect() should be used to forward\r
+ to this resource, or "false" in order to use\r
+ RequestDispatcher.forward() instead.\r
+-->\r
+<!ELEMENT forward (icon?, display-name?, description?, set-property*)>\r
+<!ATTLIST forward id ID #IMPLIED>\r
+<!ATTLIST forward className %ClassName; #IMPLIED>\r
+<!ATTLIST forward name CDATA #REQUIRED>\r
+<!ATTLIST forward path %RequestPath; #REQUIRED>\r
+<!ATTLIST forward redirect %Boolean; #IMPLIED>\r
+\r
+\r
+<!-- The "action-mappings" element configures the mappings from submitted\r
+ request paths to the corresponding Action classes that should be\r
+ used to process these requests. The following attributes are\r
+ defined:\r
+\r
+ type Fully qualified Java class name of the ActionMapping\r
+ implementation class to be used. DEPRECATED.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "mapping" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT action-mappings (action*)>\r
+<!ATTLIST action-mappings id ID #IMPLIED>\r
+<!ATTLIST action-mappings type %ClassName; "org.apache.struts.action.ActionMapping">\r
+\r
+\r
+<!-- The "action" element describes a mapping from a request paths to the\r
+ corresponding Action classes that should be used to process these\r
+ requests. The following attributes are defined:\r
+\r
+ attribute Name of the request-scope or session-scope attribute\r
+ under which our form bean is accessed, if it is other\r
+ than the bean's specified "name". Optional if\r
+ "name" is specified, else not allowed.\r
+\r
+ className Fully qualified Java class name of the ActionMapping\r
+ implementation class to use. Defaults to the value\r
+ configured as the "mapping" initialization parameter\r
+ to the Struts controller servlet.\r
+\r
+ forward Context-relative path of the servlet or JSP resource that\r
+ will process this request, instead of instantiating and\r
+ calling the Action class specified by "type". Exactly one\r
+ of "forward", "include", or "type" must be specified.\r
+\r
+ include Context-relative path of the servlet or JSP resource that\r
+ will process this request, instead of instantiating and\r
+ calling the Action class specified by "type". Exactly one\r
+ of "forward", "include", or "type" must be specified.\r
+\r
+ input Context-relative path of the input form to which control\r
+ should be returned if a validation error is encountered.\r
+ Required if "name" is specified and the input bean\r
+ returns validation errors. Optional if "name" is\r
+ specified and the input bean does not return validation\r
+ errors. Not allowed if "name" is not specified.\r
+\r
+ name Name of the form bean, if any, that is associated\r
+ with this action.\r
+\r
+ path The context-relative path of the submitted request,\r
+ starting with a "/" character, and without the\r
+ filename extension if extension mapping is used.\r
+\r
+ parameter General purpose configuration parameter that can be used\r
+ to pass extra information to the Action selected by this\r
+ mapping.\r
+\r
+ prefix Prefix used to match request parameter names to form bean\r
+ property names, if any. Optional if "name" is specified,\r
+ else not allowed.\r
+\r
+ scope Identifier of the scope ("request" or "session") within\r
+ which our form bean is accessed, if any. Optional if\r
+ "name" is specified, else not allowed.\r
+\r
+ suffix Suffix used to match request parameter names to form bean\r
+ property names, if any. Optional if "name" is specified,\r
+ else not allowed.\r
+\r
+ type Fully qualified Java class name of the Action class\r
+ (implements org.apache.struts.action.Action) to be\r
+ used to process requests for this mapping if the "forward"\r
+ or "include" attribute is not included. Exactly one\r
+ of "forward", "include", or "type" must be specified.\r
+\r
+ unknown Set to "true" if this action should be configured as the\r
+ default for this application, to handle all requests\r
+ not handled by another action. Only one action can be\r
+ defined as a default within a single application.\r
+\r
+ validate Set to "true" if the validate() method of the form bean\r
+ should be called prior to calling this action, or set to\r
+ "false" if you do not want validation performed.\r
+-->\r
+<!ELEMENT action (icon?, display-name?, description?, set-property*, forward*)>\r
+<!ATTLIST action id ID #IMPLIED>\r
+<!ATTLIST action attribute %BeanName; #IMPLIED>\r
+<!ATTLIST action className %ClassName; #IMPLIED>\r
+<!ATTLIST action forward %RequestPath; #IMPLIED>\r
+<!ATTLIST action include %RequestPath; #IMPLIED>\r
+<!ATTLIST action input %RequestPath; #IMPLIED>\r
+<!ATTLIST action name %BeanName; #IMPLIED>\r
+<!ATTLIST action parameter CDATA #IMPLIED>\r
+<!ATTLIST action path %RequestPath; #REQUIRED>\r
+<!ATTLIST action prefix CDATA #IMPLIED>\r
+<!ATTLIST action scope %RequestScope; #IMPLIED>\r
+<!ATTLIST action suffix CDATA #IMPLIED>\r
+<!ATTLIST action type %ClassName; #IMPLIED>\r
+<!ATTLIST action unknown %Boolean; #IMPLIED>\r
+<!ATTLIST action validate %Boolean; #IMPLIED>\r
+\r
+\r
+<!-- The "set-property" element specifies the name and value of an additional\r
+ JavaBeans configuration property whose setter method will be called\r
+ on the object that represents our surrounding element. This is especially\r
+ useful when an extended implementation class (with additional properties)\r
+ is configured on the <global-forwards> or <action-mappings> elements.\r
+ The following attributes are defined:\r
+\r
+ property Name of the JavaBeans property whose setter method\r
+ will be called.\r
+\r
+ value String representation of the value to which this\r
+ property will be set, after suitable type conversion\r
+-->\r
+<!ELEMENT set-property EMPTY>\r
+<!ATTLIST set-property id ID #IMPLIED>\r
+<!ATTLIST set-property property %PropName; #REQUIRED>\r
+<!ATTLIST set-property value CDATA #REQUIRED>\r
+\r
+\r
+\r
+<!-- ========== Subordinate Elements ====================================== -->\r
+\r
+\r
+<!-- The "description" element contains descriptive (paragraph length) text\r
+ about the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT description (#PCDATA)>\r
+<!ATTLIST description id ID #IMPLIED>\r
+\r
+\r
+\r
+<!-- The "display-name" element contains a short (one line) description of\r
+ the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT display-name (#PCDATA)>\r
+<!ATTLIST display-name id ID #IMPLIED>\r
+\r
+\r
+<!-- The "icon" element contains a small-icon and large-icon element which\r
+ specify the location, relative to the Struts configuration file, for small\r
+ and large images used to represent the surrounding element in GUI tools.\r
+-->\r
+<!ELEMENT icon (small-icon?, large-icon?)>\r
+<!ATTLIST icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "large-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a large (32x32 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT large-icon (%Location;)>\r
+<!ATTLIST large-icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "small-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a small (16x16 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT small-icon (%Location;)>\r
+<!ATTLIST small-icon id ID #IMPLIED>\r
+\r
--- /dev/null
+<!--\r
+ DTD for the Struts Application Configuration File, Version 1.1\r
+\r
+ To support validation of your configuration file, include the following\r
+ DOCTYPE element at the beginning (after the "xml" declaration):\r
+\r
+ <!DOCTYPE struts-config PUBLIC\r
+ "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"\r
+ "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">\r
+\r
+ $Id: struts-config_1_1.dtd,v 1.40 2003/05/14 08:17:16 turner Exp $\r
+-->\r
+\r
+\r
+<!-- ========== Defined Types ============================================= -->\r
+\r
+\r
+<!-- An "AttributeName" is the identifier of a page, request, session, or\r
+ application scope attribute.\r
+-->\r
+<!ENTITY % AttributeName "CDATA">\r
+\r
+\r
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,\r
+ and also serves as the name of the corresponding scripting variable\r
+ and the name of the JSP attribute under which the bean is accessed.\r
+ Therefore, it must conform to the rules for a Java identifier.\r
+-->\r
+<!ENTITY % BeanName "CDATA">\r
+\r
+\r
+<!-- A "Boolean" is the string representation of a boolean (true or false)\r
+ variable.\r
+-->\r
+<!ENTITY % Boolean "(true|false|yes|no)">\r
+\r
+\r
+<!-- A "ClassName" is the fully qualified name of a Java class that is\r
+ instantiated to provide the functionality of the enclosing element.\r
+-->\r
+<!ENTITY % ClassName "CDATA">\r
+\r
+\r
+<!-- An "Integer" is a character string consisting solely of numeric digits,\r
+ optionally preceeded by a minus sign, that can be converted to a\r
+ 32-bit integer.\r
+-->\r
+<!ENTITY % Integer "CDATA">\r
+\r
+\r
+<!-- A "Location" is a relative path, delimited by "/" characters, that\r
+ defines the location of a resource relative to the location of the\r
+ Struts configuration file itself.\r
+-->\r
+<!ENTITY % Location "#PCDATA">\r
+\r
+\r
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with\r
+ a lower case letter and contain only characters that are legal in a\r
+ Java identifier.\r
+-->\r
+<!ENTITY % PropName "CDATA">\r
+\r
+\r
+<!-- A "RequestPath" is an application-relative URI path, beginning with a\r
+ slash, that identifies a mapped resource (such as a JSP page or a servlet)\r
+ within this web application.\r
+-->\r
+<!ENTITY % RequestPath "CDATA">\r
+\r
+\r
+<!-- The name of a JSP bean scope within which such a form bean may be\r
+ accessed.\r
+-->\r
+<!ENTITY % RequestScope "(request|session)">\r
+\r
+\r
+<!-- ========== Top Level Elements ======================================== -->\r
+\r
+\r
+<!-- The "struts-config" element is the root of the configuration file\r
+ hierarchy, and contains nested elements for all of the other\r
+ configuration settings.\r
+-->\r
+<!ELEMENT struts-config (data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>\r
+<!ATTLIST struts-config id ID #IMPLIED>\r
+\r
+\r
+<!-- The "data-sources" element describes a set of DataSource objects [JDBC 2.0\r
+ Standard Extension]. The individual DataSource objects are configured through\r
+ nested <data-source> elements.\r
+-->\r
+<!ELEMENT data-sources (data-source*)>\r
+<!ATTLIST data-sources id ID #IMPLIED>\r
+\r
+\r
+<!-- The "data-source" element describes a DataSource object [JDBC 2.0 Standard\r
+ Extension] that will be instantiated, configured, and made available as a\r
+ servlet context attribute (or "application-scope bean"). Any object can be\r
+ specified so long as it implements [javax.sql.DataSource] and can be\r
+ configured entirely from JavaBean properties. The following attributes\r
+ are required:\r
+\r
+ className The configuration bean for this DataSource object. If\r
+ specified, the object must be a subclass of the default\r
+ configuration bean.\r
+ ["org.apache.struts.config.DataSourceConfig"]\r
+\r
+ key Servlet context attribute key under which this data source\r
+ will be stored. Default is the value specified by string\r
+ constant defined by Globals.DATA_SOURCE_KEY. The application\r
+ module prefix (if any) is appended to the key\r
+ (${key}$prefix}).\r
+ [org.apache.struts.Globals.DATA_SOURCE_KEY]\r
+\r
+ NOTE: The application module prefix includes the leading\r
+ slash, so the default datasource for a module named "foo" is\r
+ stored under "org.apache.struts.action.DATA_SOURCE/foo".\r
+\r
+ type Fully qualified Java class name for this data source object.\r
+ The class must implement DataSource [javax.sql.DataSource],\r
+ and the object must be configurable entirely from JavaBean\r
+ properties.\r
+-->\r
+<!ELEMENT data-source (set-property*)>\r
+<!ATTLIST data-source id ID #IMPLIED>\r
+<!ATTLIST data-source className %ClassName; #IMPLIED>\r
+<!ATTLIST data-source key %AttributeName; #IMPLIED>\r
+<!ATTLIST data-source type %ClassName; #IMPLIED>\r
+\r
+\r
+<!-- The "form-beans" element describes the set of form bean descriptors for this\r
+ application module. The following attributes are defined:\r
+\r
+ type Fully qualified Java class to use when instantiating\r
+ ActionFormBean objects. If specified, the object must be a\r
+ subclass of the default class type.\r
+ DEPRECATED.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "formBean" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT form-beans (form-bean*)>\r
+<!ATTLIST form-beans id ID #IMPLIED>\r
+<!ATTLIST form-beans type %ClassName; #IMPLIED>\r
+\r
+\r
+<!-- The "form-bean" element describes an ActionForm subclass\r
+ [org.apache.struts.action.ActionForm] that can be referenced by an "action"\r
+ element.\r
+\r
+\r
+The "form-bean" element describes a particular form bean, which is a\r
+ JavaBean that implements the org.apache.struts.action.ActionForm\r
+ class. The following attributes are defined:\r
+\r
+ className The configuration bean for this form bean object. If\r
+ specified, the object must be a subclass of the default\r
+ configuration bean.\r
+ ["org.apache.struts.config.FormBeanConfig"]\r
+\r
+ dynamic If the form bean type is a DynaActionForm subclass (that you\r
+ created), then (and only then) set this attribute to "true".\r
+ If the type is set to the default DynaActionForm or any\r
+ conventional ActionForm subclass, then this attribute can be\r
+ omitted.\r
+ [true] if type is "org.apache.struts.action.DynaActionForm"\r
+ [false] otherwise DEPRECATED - THIS IS NOW DETERMINED\r
+ DYNAMICALLY BASED ON THE SPECIFIED IMPLEMENTATION CLASS.\r
+\r
+ name The unique identifier for this form bean. Referenced by the\r
+ <action> element to specify which form bean to use with its\r
+ request.\r
+\r
+ type Fully qualified Java class name of the ActionForm subclass\r
+ to use with this form bean.\r
+-->\r
+<!ELEMENT form-bean (icon?, display-name?, description?, set-property*, form-property*)>\r
+<!ATTLIST form-bean id ID #IMPLIED>\r
+<!ATTLIST form-bean className %ClassName; #IMPLIED>\r
+<!ATTLIST form-bean dynamic %Boolean; #IMPLIED>\r
+<!ATTLIST form-bean name %BeanName; #REQUIRED>\r
+<!ATTLIST form-bean type %ClassName; #REQUIRED>\r
+\r
+\r
+<!-- The "form-property" element describes a JavaBean property that can be used to\r
+ configure an instance of a DynaActionForm or a subclass thereof. This element\r
+ is only utilized when the "type" attribute of the enclosing "form-bean" element\r
+ is [org.apache.struts.action.DynaActionForm] or a subclass of DynaActionForm. If\r
+ a custom DynaActionForm subclass is used, then the "dynamic" attribute of the\r
+ enclosing <form-bean> element must be set to "true". Since Struts 1.1.\r
+\r
+ className The configuration bean for this form property object. If\r
+ specified, the object must be a subclass of the default\r
+ configuration bean.\r
+ ["org.apache.struts.config.FormPropertyConfig"]\r
+\r
+ initial String representation of the initial value for this property.\r
+ If not specified, primitives will be initialized to zero and\r
+ objects initialized to the zero-argument instantiation of that\r
+ object class. For example, Strings will be initialized to ""\r
+\r
+\r
+ name The name of the JavaBean property described by this element.\r
+\r
+ size The number of array elements to create if the value of the\r
+ "type" attribute specifies an array, but there is no value\r
+ specified for the "initial" attribute.\r
+\r
+ type Fully qualified Java class name of the field underlying this\r
+ property, optionally followed by "[]" to indicate that the\r
+ field is indexed.\r
+-->\r
+<!ELEMENT form-property (set-property*)>\r
+<!ATTLIST form-property className %ClassName; #IMPLIED>\r
+<!ATTLIST form-property initial CDATA #IMPLIED>\r
+<!ATTLIST form-property name %PropName; #REQUIRED>\r
+<!ATTLIST form-property size %Integer; #IMPLIED>\r
+<!ATTLIST form-property type %ClassName; #REQUIRED>\r
+\r
+\r
+<!-- The "global-exceptions" element describes a set of exceptions that might be\r
+ thrown by an Action object. The handling of individual exception types is\r
+ configured through nested exception elements. An <action> element may\r
+ override a global exception handler by registering a local exception handler\r
+ for the same exception type. Since Struts 1.1.\r
+-->\r
+<!ELEMENT global-exceptions (exception*)>\r
+<!ATTLIST global-exceptions id ID #IMPLIED>\r
+\r
+\r
+<!-- The "exception" element registers an ExceptionHandler for an exception type.\r
+ The following attributes are defined:\r
+\r
+ bundle Servlet context attribute for the message resources bundle\r
+ associated with this handler. The default attribute is the\r
+ value specified by the string constant declared at\r
+ Globals.MESSAGES_KEY.\r
+ [org.apache.struts.Globals.MESSAGES_KEY]\r
+\r
+ className The configuration bean for this ExceptionHandler object.\r
+ If specified, className must be a subclass of the default\r
+ configuration bean\r
+ ["org.apache.struts.config.ExceptionConfig"]\r
+\r
+ handler Fully qualified Java class name for this exception handler.\r
+ ["org.apache.struts.action.ExceptionHandler"]\r
+\r
+ key The key to use with this handler's message resource bundle\r
+ that will retrieve the error message template for this\r
+ exception.\r
+\r
+ path The module-relative URI to the resource that will complete\r
+ the request/response if this exception occurs.\r
+\r
+ scope The context ("request" or "session") that is used to access\r
+ the ActionError object [org.apache.struts.action.ActionError]\r
+ for this exception.\r
+\r
+ type Fully qualified Java class name of the exception type to\r
+ register with this handler.\r
+-->\r
+<!ELEMENT exception (icon?, display-name?, description?, set-property*)>\r
+<!ATTLIST exception id ID #IMPLIED>\r
+<!ATTLIST exception bundle %AttributeName; #IMPLIED>\r
+<!ATTLIST exception className %ClassName; #IMPLIED>\r
+<!ATTLIST exception handler %ClassName; #IMPLIED>\r
+<!ATTLIST exception key CDATA #REQUIRED>\r
+<!ATTLIST exception path %RequestPath; #IMPLIED>\r
+<!ATTLIST exception scope CDATA #IMPLIED>\r
+<!ATTLIST exception type %ClassName; #REQUIRED>\r
+\r
+\r
+<!-- The "global-forwards" element describes a set of ActionForward objects\r
+ [org.apache.struts.action.ActionForward] that are available to all Action\r
+ objects as a return value. The individual ActionForwards are configured\r
+ through nested <forward> elements. An <action> element may override a global\r
+ forward by defining a local <forward> of the same name.\r
+\r
+ type Fully qualified Java class to use when instantiating\r
+ ActionForward objects. If specified, the object must be a\r
+ subclass of the default class type.\r
+ DEPRECATED.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "forward" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT global-forwards (forward*)>\r
+<!ATTLIST global-forwards id ID #IMPLIED>\r
+<!ATTLIST global-forwards type %ClassName; #IMPLIED>\r
+\r
+\r
+<!-- The "forward" element describes an ActionForward that is to be made\r
+ available to an Action as a return value. An ActionForward is referenced by\r
+ a logical name and encapsulates a URI. A "forward" element may be used to\r
+ describe both global and local ActionForwards. Global forwards are available\r
+ to all the Action objects in the application module. Local forwards can be\r
+ nested within an <action> element and only available to an Action object\r
+ when it is invoked through that ActionMapping.\r
+\r
+ className Fully qualified Java class name of ActionForward\r
+ subclass to use for this object.\r
+ ["org.apache.struts.action.ActionForward"]\r
+\r
+ contextRelative Set this to "true" if, in a modular application, the path\r
+ attribute starts with a slash "/" and should be considered\r
+ relative to the entire web application rather than the module.\r
+ Since Struts 1.1.\r
+ [false]\r
+\r
+ name The unique identifier for this forward. Referenced by the\r
+ Action object at runtime to select - by its logical name -\r
+ the resource that should complete the request/response.\r
+\r
+ path The module-relative or context-relative path to the resources\r
+ that is encapsulated by the logical name of this ActionForward.\r
+ If the path is to be considered context-relative when used in\r
+ a modular application, then the contextRelative attribute\r
+ should be set to "true". This value should begin with a slash\r
+ ("/") character.\r
+\r
+ redirect Set to "true" if a redirect instruction should be issued to\r
+ the user-agent so that a new request is issued for this\r
+ forward's resource. If true, RequestDispatcher.Redirect is\r
+ called. If "false", RequestDispatcher.forward is called instead.\r
+ [false]\r
+-->\r
+<!ELEMENT forward (icon?, display-name?, description?, set-property*)>\r
+<!ATTLIST forward id ID #IMPLIED>\r
+<!ATTLIST forward className %ClassName; #IMPLIED>\r
+<!ATTLIST forward contextRelative %Boolean; #IMPLIED>\r
+<!ATTLIST forward name CDATA #REQUIRED>\r
+<!ATTLIST forward path %RequestPath; #REQUIRED>\r
+<!ATTLIST forward redirect %Boolean; #IMPLIED>\r
+\r
+\r
+<!-- The "action-mappings" element describes a set of ActionMapping objects\r
+ [org.apache.struts.action.ActionMapping] that are available to process\r
+ requests matching the url-pattern our ActionServlet registered with the\r
+ container. The individual ActionMappings are configured through nested\r
+ <action> elements. The following attributes are defined:\r
+\r
+ type Fully qualified Java class to use when instantiating\r
+ ActionMapping objects. If specified, the object must be a\r
+ subclass of the default class type.\r
+\r
+ WARNING: For Struts 1.0, this value is ignored. You\r
+ can set the default implementation class name with the\r
+ "mapping" initialization parameter to the Struts\r
+ controller servlet.\r
+-->\r
+<!ELEMENT action-mappings (action*)>\r
+<!ATTLIST action-mappings id ID #IMPLIED>\r
+<!ATTLIST action-mappings type %ClassName; #IMPLIED>\r
+\r
+\r
+<!-- The "action" element describes an ActionMapping object that is to be used\r
+ to process a request for a specific module-relative URI. The following\r
+ attributes are defined:\r
+\r
+ attribute Name of the request-scope or session-scope attribute that\r
+ is used to access our ActionForm bean, if it is other than\r
+ the bean's specified "name". Optional if "name" is specified,\r
+ else not valid.\r
+\r
+ className The fully qualified Java class name of the ActionMapping\r
+ subclass to use for this action mapping object. Defaults to\r
+ the type specified by the enclosing <action-mappings>\r
+ element or to "org.apache.struts.action.ActionMapping" if\r
+ not specified.\r
+ ["org.apache.struts.action.ActionMapping"]\r
+\r
+ forward Module-relative path of the servlet or other resource that\r
+ will process this request, instead of the Action class\r
+ specified by "type". The path WILL NOT be processed\r
+ through the "forwardPattern" attribute that is configured\r
+ on the "controller" element for this application module.\r
+ Exactly one of "forward", "include", or "type" must be\r
+ specified.\r
+\r
+ include Module-relative path of the servlet or other resource that\r
+ will process this request, instead of the Action class\r
+ specified by "type". The path WILL NOT be processed\r
+ through the "forwardPattern" attribute that is configured\r
+ on the "controller" element for this application module.\r
+ Exactly one of "forward", "include", or "type" must be\r
+ specified.\r
+\r
+ input Module-relative path of the action or other resource to\r
+ which control should be returned if a validation error is\r
+ encountered. Valid only when "name" is specified. Required\r
+ if "name" is specified and the input bean returns\r
+ validation errors. Optional if "name" is specified and the\r
+ input bean does not return validation errors.\r
+\r
+ name Name of the form bean, if any, that is associated with this\r
+ action mapping.\r
+\r
+ path The module-relative path of the submitted request, starting\r
+ with a "/" character, and without the filename extension if\r
+ extension mapping is used.\r
+\r
+ NOTE: Do *not* include a period in your path name,\r
+ because it will look like a filename extension and\r
+ cause your Action to not be located.\r
+\r
+ parameter General-purpose configuration parameter that can be used to\r
+ pass extra information to the Action object selected by\r
+ this action mapping.\r
+\r
+ prefix Prefix used to match request parameter names to ActionForm\r
+ property names, if any. Optional if "name" is specified,\r
+ else not allowed.\r
+\r
+ roles Comma-delimited list of security role names that are allowed\r
+ access to this ActionMapping object. Since Struts 1.1.\r
+\r
+ scope The context ("request" or "session") that is used to\r
+ access our ActionForm bean, if any. Optional if "name" is\r
+ specified, else not valid.\r
+\r
+ suffix Suffix used to match request parameter names to ActionForm\r
+ bean property names, if any. Optional if "name" is\r
+ specified, else not valid.\r
+\r
+ type Fully qualified Java class name of the Action subclass\r
+ [org.apache.struts.action.Action] that will process requests\r
+ for this action mapping. Not valid if either the "forward"\r
+ or "include" attribute is specified. Exactly one of\r
+ "forward", "include", or "type" must be specified.\r
+\r
+ unknown Set to "true" if this object should be configured as the\r
+ default action mapping for this module. If a request does not\r
+ match another object, it will be passed to the ActionMapping\r
+ object with unknown set to "true". Only one ActionMapping\r
+ can be marked as "unknown" within a module.\r
+ [false]\r
+\r
+ validate Set to "true" if the validate method of the ActionForm bean\r
+ should be called prior to calling the Action object for this\r
+ action mapping, or set to "false" if you do not want the\r
+ validate method called.\r
+ [true]\r
+-->\r
+<!ELEMENT action (icon?, display-name?, description?, set-property*, exception*, forward*)>\r
+<!ATTLIST action id ID #IMPLIED>\r
+<!ATTLIST action attribute %BeanName; #IMPLIED>\r
+<!ATTLIST action className %ClassName; #IMPLIED>\r
+<!ATTLIST action forward %RequestPath; #IMPLIED>\r
+<!ATTLIST action include %RequestPath; #IMPLIED>\r
+<!ATTLIST action input %RequestPath; #IMPLIED>\r
+<!ATTLIST action name %BeanName; #IMPLIED>\r
+<!ATTLIST action parameter CDATA #IMPLIED>\r
+<!ATTLIST action path %RequestPath; #REQUIRED>\r
+<!ATTLIST action prefix CDATA #IMPLIED>\r
+<!ATTLIST action roles CDATA #IMPLIED>\r
+<!ATTLIST action scope %RequestScope; #IMPLIED>\r
+<!ATTLIST action suffix CDATA #IMPLIED>\r
+<!ATTLIST action type %ClassName; #IMPLIED>\r
+<!ATTLIST action unknown %Boolean; #IMPLIED>\r
+<!ATTLIST action validate %Boolean; #IMPLIED>\r
+\r
+\r
+<!-- The "controller" element describes the ControllerConfig bean\r
+ [org.apache.struts.config.ControllerConfig] that encapsulates\r
+ an application module's runtime configuration. The following\r
+ attributes are defined:\r
+\r
+ bufferSize The size of the input buffer used when processing\r
+ file uploads.\r
+ [4096]\r
+\r
+ className Fully qualified Java class name of the\r
+ ControllerConfig subclass for this controller object.\r
+ If specified, the object must be a subclass of the\r
+ default class.\r
+ ["org.apache.struts.config.ControllerConfig"]\r
+\r
+ contentType Default content type (and optional character encoding) to\r
+ be set on each response. May be overridden by the Action,\r
+ JSP, or other resource to which the request is forwarded.\r
+ ["text/html"]\r
+\r
+ debug Debugging detail level for this module. [0]\r
+ DEPRECATED - configure the logging detail level\r
+ in your underlying logging implementation.\r
+\r
+ forwardPattern Replacement pattern defining how the "path" attribute of a\r
+ <forward> element is mapped to a context-relative URL when\r
+ it starts with a slash (and when the contextRelative\r
+ property is false). This value may consist of any\r
+ combination of the following:\r
+ - "$M" - Replaced by the module prefix of this module\r
+ - "$P" - Replaced by the "path" attribute of the selected\r
+ "forward" element\r
+ - "$$" - Causes a literal dollar sign to be rendered\r
+ - "$x" - (Where "x" is any character not defined above)\r
+ Silently swallowed, reserved for future use\r
+ If not specified, the default forwardPattern is "$M$P",\r
+ which is consistent with the previous behavior of\r
+ forwards. Since Struts 1.1. ["$M$P"]\r
+\r
+ inputForward Set to "true" if you want the "input" attribute of\r
+ <action> elements to be the name of a local or global\r
+ ActionForward, which will then be used to calculate the\r
+ ultimate URL. Set to "false" (the default) to treat the\r
+ "input" parameter of <action> elements as a\r
+ module-relative path to the resource\r
+ to be used as the input form. Since Struts 1.1.\r
+ [false]\r
+\r
+ locale Set to "true" if you want a Locale object stored in the\r
+ user's session if not already present.\r
+ [true]\r
+\r
+ maxFileSize The maximum size (in bytes) of a file to be accepted as a\r
+ file upload. Can be expressed as a number followed by a\r
+ "K", "M", or "G", which are interpreted to mean kilobytes,\r
+ megabytes, or gigabytes, respectively.\r
+ ["250M"]\r
+\r
+ memFileSize The maximum size (in bytes) of a file whose contents will\r
+ be retained in memory after uploading. Files larger than\r
+ this threshold will be written to some alternative storage\r
+ medium, typically a hard disk. Can be expressed as a number\r
+ followed by a "K", "M", or "G", which are interpreted to\r
+ mean kilobytes, megabytes, or gigabytes, respectively.\r
+ ["256K"]\r
+\r
+ multipartClass The fully qualified Java class name of the multipart\r
+ request handler class to be used with this module.\r
+ ["org.apache.struts.upload.CommonsMultipartRequestHandler"]\r
+\r
+ nocache Set to "true" if you want the controller to add HTTP\r
+ headers for defeating caching to every response from\r
+ this module. [false]\r
+\r
+ pagePattern Replacement pattern defining how the "page" attribute of\r
+ custom tags using it is mapped to a context-relative URL\r
+ of the corresponding resource. This value may consist of\r
+ any combination of the following:\r
+ - "$M" - Replaced by the module prefix of this module\r
+ - "$P" - Replaced by the value of the "page" attribute\r
+ - "$$" - Causes a literal dollar sign to be rendered\r
+ - "$x" - (Where "x" is any character not defined above)\r
+ Silently swallowed, reserved for future use\r
+ If not specified, the default forwardPattern is\r
+ "$M$P", which is consistent with previous hard coded\r
+ behavior of URL evaluation for "page" attributes.\r
+ ["$M$P"]\r
+\r
+ processorClass The fully qualified Java class name of the\r
+ RequestProcessor subclass to be used with this module.\r
+ ["org.apache.struts.action.RequestProcessor"]\r
+\r
+ tempDir Temporary working directory to use when processing\r
+ file uploads.\r
+ [{Directory provided by servlet container}]\r
+-->\r
+<!ELEMENT controller (set-property*)>\r
+<!ATTLIST controller id ID #IMPLIED>\r
+<!ATTLIST controller bufferSize %Integer; #IMPLIED>\r
+<!ATTLIST controller className %ClassName; #IMPLIED>\r
+<!ATTLIST controller contentType CDATA #IMPLIED>\r
+<!ATTLIST controller debug %Integer; #IMPLIED>\r
+<!ATTLIST controller forwardPattern CDATA #IMPLIED>\r
+<!ATTLIST controller inputForward %Boolean; #IMPLIED>\r
+<!ATTLIST controller locale %Boolean; #IMPLIED>\r
+<!ATTLIST controller maxFileSize CDATA #IMPLIED>\r
+<!ATTLIST controller memFileSize CDATA #IMPLIED>\r
+<!ATTLIST controller multipartClass %ClassName; #IMPLIED>\r
+<!ATTLIST controller nocache %Boolean; #IMPLIED>\r
+<!ATTLIST controller pagePattern CDATA #IMPLIED>\r
+<!ATTLIST controller processorClass %ClassName; #IMPLIED>\r
+<!ATTLIST controller tempDir CDATA #IMPLIED>\r
+\r
+\r
+<!-- The "message-resources" element describes a MessageResources object with\r
+ message templates for this module. The following attributes are defined:\r
+\r
+ className The configuration bean for this message resources object.\r
+ If specified, the object must be a subclass of the default\r
+ configuration bean.\r
+ ["org.apache.struts.config.MessageResourcesConfig"]\r
+\r
+ factory Fully qualified Java class name of the\r
+ MessageResourcesFactory subclass to use for this message\r
+ resources object.\r
+ ["org.apache.struts.util.PropertyMessageResourcesFactory"]\r
+\r
+ key Servlet context attribute under which this message\r
+ resources bundle will be stored. The default attribute is\r
+ the value specified by the string constant at\r
+ [Globals.MESSAGES_KEY]. The application module prefix (if\r
+ any) is appended to the key (${key}${prefix}).\r
+ [org.apache.struts.Globals.MESSAGES_KEY]\r
+\r
+ NOTE: The application module prefix includes the leading\r
+ slash, so the default message resource bundle for a module\r
+ named "foo" is stored under\r
+ "org.apache.struts.action.MESSAGE/foo".\r
+\r
+ null Set to "true" if you want our message resources to return a\r
+ null string for unknown message keys, or "false" to return a\r
+ message with the bad key value.\r
+\r
+ parameter Configuration parameter to be passed to the createResources\r
+ method of our factory object.\r
+-->\r
+<!ELEMENT message-resources (set-property*)>\r
+<!ATTLIST message-resources id ID #IMPLIED>\r
+<!ATTLIST message-resources className %ClassName; #IMPLIED>\r
+<!ATTLIST message-resources factory %ClassName; #IMPLIED>\r
+<!ATTLIST message-resources key %AttributeName; #IMPLIED>\r
+<!ATTLIST message-resources null %Boolean; #IMPLIED>\r
+<!ATTLIST message-resources parameter CDATA #REQUIRED>\r
+\r
+\r
+<!-- The "plug-in" element specifies the fully qualified class name of a\r
+ general-purpose application plug-in module that receives notification of\r
+ application startup and shutdown events. An instance of the specified class\r
+ is created for each element, and can be configured with nested <set-property>\r
+ elements. The following attributes are supported:\r
+\r
+ className Fully qualified Java class name of the plug-in class; must\r
+ implement [org.apache.struts.action.PlugIn].\r
+-->\r
+<!ELEMENT plug-in (set-property*)>\r
+<!ATTLIST plug-in id ID #IMPLIED>\r
+<!ATTLIST plug-in className %ClassName; #REQUIRED>\r
+\r
+\r
+<!-- ========== Subordinate Elements ====================================== -->\r
+\r
+\r
+<!-- The "description" element contains descriptive (paragraph length) text\r
+ about the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT description (#PCDATA)>\r
+<!ATTLIST description id ID #IMPLIED>\r
+\r
+\r
+<!-- The "display-name" element contains a short (one line) description of\r
+ the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT display-name (#PCDATA)>\r
+<!ATTLIST display-name id ID #IMPLIED>\r
+\r
+\r
+<!-- The "icon" element contains a small-icon and large-icon element which\r
+ specify the location, relative to the Struts configuration file, for small\r
+ and large images used to represent the surrounding element in GUI tools.\r
+-->\r
+<!ELEMENT icon (small-icon?, large-icon?)>\r
+<!ATTLIST icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "large-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a large (32x32 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT large-icon (%Location;)>\r
+<!ATTLIST large-icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "set-property" element specifies the method name and initial value of\r
+ an additional JavaBean configuration property. When the object representing\r
+ the surrounding element is instantiated, the accessor for the indicated\r
+ property is called and passed the indicated value. The "set-property"\r
+ element is especially useful when a custom subclass is used with\r
+ <data-source>, <forward>, <action>, or <plug-in> elements. The subclass\r
+ can be passed whatever other properties may be required to configure the\r
+ object without changing how the struts-config is parsed.\r
+\r
+ property Name of the JavaBeans property whose setter method\r
+ will be called.\r
+\r
+ value String representation of the value to which this\r
+ property will be set, after suitable type conversion\r
+-->\r
+<!ELEMENT set-property EMPTY>\r
+<!ATTLIST set-property id ID #IMPLIED>\r
+<!ATTLIST set-property property %PropName; #REQUIRED>\r
+<!ATTLIST set-property value CDATA #REQUIRED>\r
+\r
+\r
+<!-- The "small-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a small (16x16 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT small-icon (%Location;)>\r
+<!ATTLIST small-icon id ID #IMPLIED>\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!--\r
+ DTD for the Tile Definition File, Version 1.0\r
+\r
+ To support validation of your configuration file, include the following\r
+ DOCTYPE element at the beginning (after the "xml" declaration):\r
+\r
+ <!DOCTYPE tiles-definitions PUBLIC\r
+ "-//Apache Software Foundation//DTD Tiles Configuration//EN"\r
+ "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">\r
+\r
+ $Id: tiles-config.dtd,v 1.1 2002/06/25 03:23:20 craigmcc Exp $\r
+-->\r
+<!ELEMENT component-definitions (definition+)>\r
+<!ELEMENT tiles-definitions (definition+)>\r
+<!ELEMENT definition (put*, putList*)>\r
+<!ATTLIST definition\r
+ name CDATA #REQUIRED\r
+ page CDATA #IMPLIED\r
+ path CDATA #IMPLIED\r
+ extends CDATA #IMPLIED\r
+ role CDATA #IMPLIED\r
+ template CDATA #IMPLIED\r
+ controllerClass CDATA #IMPLIED\r
+ controllerUrl CDATA #IMPLIED\r
+>\r
+<!ELEMENT put (#PCDATA)>\r
+<!ATTLIST put\r
+ name CDATA #REQUIRED\r
+ value CDATA #IMPLIED\r
+ type (string | page | template | definition) #IMPLIED\r
+ content CDATA #IMPLIED\r
+ direct (true | false) #IMPLIED\r
+>\r
+<!ELEMENT putList ( (add* | item* | bean* | putList*)+) >\r
+<!ATTLIST putList\r
+ name CDATA #REQUIRED\r
+>\r
+<!ELEMENT putListElements (add | item | bean)>\r
+\r
+<!ELEMENT add (#PCDATA)>\r
+<!ATTLIST add\r
+ value CDATA #IMPLIED\r
+ type (string | page | template | definition) #IMPLIED\r
+ content CDATA #IMPLIED\r
+ direct (true | false) #IMPLIED\r
+>\r
+\r
+<!ELEMENT bean (#PCDATA)>\r
+<!ATTLIST bean\r
+ classtype CDATA #REQUIRED\r
+>\r
+\r
+<!ELEMENT item (#PCDATA)>\r
+<!ATTLIST item\r
+ value CDATA #REQUIRED\r
+ link CDATA #REQUIRED\r
+ classtype CDATA #IMPLIED\r
+ icon CDATA #IMPLIED\r
+ tooltip CDATA #IMPLIED\r
+>\r
--- /dev/null
+<!--\r
+ DTD for the Tile Definition File, Version 1.1\r
+\r
+ To support validation of your configuration file, include the following\r
+ DOCTYPE element at the beginning (after the "xml" declaration):\r
+\r
+ <!DOCTYPE tiles-definitions PUBLIC\r
+ "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"\r
+ "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">\r
+\r
+ $Id: tiles-config_1_1.dtd,v 1.6 2003/05/03 16:19:56 jholmes Exp $\r
+-->\r
+\r
+\r
+<!-- ========== Defined Types ============================================= -->\r
+\r
+\r
+<!-- A "Boolean" is the string representation of a boolean (true or false)\r
+ variable.\r
+-->\r
+<!ENTITY % Boolean "(true|false)">\r
+\r
+\r
+<!-- A "ContentType" is the content type of an attribute passed to a tile\r
+ component.\r
+-->\r
+<!ENTITY % ContentType "(string|page|template|definition)">\r
+\r
+<!-- A "ClassName" is the fully qualified name of a Java class that is\r
+ instantiated to provide the functionality of the enclosing element.\r
+-->\r
+<!ENTITY % ClassName "CDATA">\r
+\r
+<!-- A "RequestPath" is an application-relative URI path, beginning with a\r
+ slash, that identifies a mapped resource (such as a JSP page or a servlet)\r
+ within this web application.\r
+-->\r
+<!ENTITY % RequestPath "CDATA">\r
+\r
+<!-- A "DefinitionName" is the unique identifier of a definition. This identifier\r
+ is a logical name used to reference the definition.\r
+-->\r
+<!ENTITY % DefinitionName "CDATA">\r
+\r
+<!-- A "BeanName" is the identifier of a JavaBean, such as a form bean,\r
+ and also serves as the name of the corresponding scripting variable\r
+ and the name of the JSP attribute under which the bean is accessed.\r
+ Therefore, it must conform to the rules for a Java identifier.\r
+-->\r
+<!ENTITY % BeanName "CDATA">\r
+\r
+<!-- A "PropName" is the name of a JavaBeans property, and must begin with\r
+ a lower case letter and contain only characters that are legal in a\r
+ Java identifier.\r
+-->\r
+<!ENTITY % PropName "CDATA">\r
+\r
+<!-- A "Location" is a relative path, delimited by "/" characters, that\r
+ defines the location of a resource relative to the location of the\r
+ configuration file itself.\r
+-->\r
+<!ENTITY % Location "#PCDATA">\r
+\r
+\r
+\r
+<!-- ========== Top Level Elements ======================================== -->\r
+\r
+\r
+ <!-- deprecated: use tiles-definitions instead.-->\r
+<!ELEMENT component-definitions (definition+)>\r
+\r
+<!-- The "tiles-definitions" element is the root of the configuration file\r
+ hierarchy, and contains nested elements for all of the other\r
+ configuration settings.\r
+-->\r
+<!ELEMENT tiles-definitions (definition+)>\r
+\r
+<!-- The "definition" element describes a definition that can be inserted in a jsp\r
+ page. This definition is identified by its logical name. A definition allows\r
+ to define all the attributes that can be set in <insert> tag from a jsp page.\r
+\r
+ controllerClass The fully qualified Java class name of the controller\r
+ subclass to call immediately before the tiles is inserted.\r
+ Only one of controllerClass or controllerUrl should be\r
+ specified.\r
+\r
+ controllerUrl The context-relative path to the resource used as controller\r
+ called immediately before the tiles is inserted.\r
+ Only one of controllerClass or controllerUrl should be\r
+ specified.\r
+\r
+ extends Name of a definition that is used as ancestor of this definition.\r
+ All attributes from the ancestor are available to the new\r
+ definition. Any attribute inherited from the ancestor can\r
+ be overloaded by providing a new value.\r
+\r
+ name The unique identifier for this definition.\r
+\r
+ page Same as path.\r
+\r
+ path The context-relative path to the resource used as tiles to\r
+ insert. This tiles will be inserted and a tiles context\r
+ containing appropriate attributes will be available.\r
+\r
+ role Security role name that is allowed access to this definition\r
+ object. The definition is inserted only if the role name is\r
+ allowed.\r
+\r
+ template Same as path. For compatibility with the template tag library.\r
+-->\r
+<!ELEMENT definition (icon?, display-name?, description?, put*, putList*)>\r
+<!ATTLIST definition id ID #IMPLIED>\r
+<!ATTLIST definition controllerClass %ClassName; #IMPLIED>\r
+<!ATTLIST definition controllerUrl %RequestPath; #IMPLIED>\r
+<!ATTLIST definition extends %DefinitionName; #IMPLIED>\r
+<!ATTLIST definition name %DefinitionName; #REQUIRED>\r
+<!ATTLIST definition page %RequestPath; #IMPLIED>\r
+<!ATTLIST definition path %RequestPath; #IMPLIED>\r
+<!ATTLIST definition role CDATA #IMPLIED>\r
+<!ATTLIST definition template %RequestPath; #IMPLIED>\r
+\r
+\r
+<!-- The "put" element describes an attribute of a definition. It allows to\r
+ specify the tiles attribute name and its value. The tiles value can be\r
+ specified as an xml attribute, or in the body of the <put> tag.\r
+\r
+ content Same as value. For compatibility with the template tag library.\r
+\r
+ direct Same as type="string". For compatibility with the template\r
+ tag library.\r
+\r
+ name The unique identifier for this put.\r
+\r
+ type The type of the value. Can be: string, page, template or definition.\r
+ By default, no type is associated to a value. If a type is\r
+ associated, it will be used as a hint to process the value\r
+ when the attribute will be used in the inserted tiles.\r
+\r
+ value The value associated to this tiles attribute. The value should\r
+ be specified with this tag attribute, or in the body of the tag.\r
+-->\r
+<!ELEMENT put (#PCDATA)>\r
+<!ATTLIST put id ID #IMPLIED>\r
+<!ATTLIST put content CDATA #IMPLIED>\r
+<!ATTLIST put direct %Boolean; #IMPLIED>\r
+<!ATTLIST put name CDATA #REQUIRED>\r
+<!ATTLIST put type %ContentType; #IMPLIED>\r
+<!ATTLIST put value CDATA #IMPLIED>\r
+\r
+\r
+<!-- The "putList" element describes a list attribute of a definition. It allows to\r
+ specify an attribute that is a java List containing any kind of values. In\r
+ the config file, the list elements are specified by nested <add>, <item> or\r
+ <putList>.\r
+\r
+ name The unique identifier for this put list.\r
+-->\r
+<!ELEMENT putList ( (add* | item* | bean* | putList*)+) >\r
+<!ATTLIST putList id ID #IMPLIED>\r
+<!ATTLIST putList name CDATA #REQUIRED>\r
+\r
+<!-- ========== Subordinate Elements ====================================== -->\r
+\r
+<!-- The "add" element describes an element of a list. It is similar to the\r
+ <put> element.\r
+\r
+ content Same as value. For compatibility with the template tag library.\r
+\r
+ direct Same as type="string". For compatibility with the template\r
+ tag library.\r
+\r
+ type The type of the value. Can be: string, page, template or definition.\r
+ By default, no type is associated to a value. If a type is\r
+ associated, it will be used as a hint to process the value\r
+ when the attribute will be used in the inserted tiles.\r
+\r
+ value The value associated to this tiles attribute. The value should\r
+ be specified with this tag attribute, or in the body of the tag.\r
+-->\r
+<!ELEMENT add (#PCDATA)>\r
+<!ATTLIST add id ID #IMPLIED>\r
+<!ATTLIST add content CDATA #IMPLIED>\r
+<!ATTLIST add direct %Boolean; #IMPLIED>\r
+<!ATTLIST add type %ContentType; #IMPLIED>\r
+<!ATTLIST add value CDATA #IMPLIED>\r
+\r
+\r
+<!-- The "bean" element describes an element of a list. It create a bean of the\r
+ specified java classtype. This bean is initialized with appropriate nested\r
+ <set-property>.\r
+\r
+ classtype The fully qualified classname for this bean.\r
+-->\r
+<!ELEMENT bean (set-property*)>\r
+<!ATTLIST bean id ID #IMPLIED>\r
+<!ATTLIST bean classtype %ClassName; #REQUIRED>\r
+\r
+<!-- The "set-property" element specifies the method name and initial value of\r
+ a bean property. When the object representing\r
+ the surrounding element is instantiated, the accessor for the indicated\r
+ property is called and passed the indicated value.\r
+\r
+ property Name of the JavaBeans property whose setter method\r
+ will be called.\r
+\r
+ value String representation of the value to which this\r
+ property will be set, after suitable type conversion\r
+-->\r
+<!ELEMENT set-property EMPTY>\r
+<!ATTLIST set-property id ID #IMPLIED>\r
+<!ATTLIST set-property property %PropName; #REQUIRED>\r
+<!ATTLIST set-property value CDATA #REQUIRED>\r
+\r
+\r
+<!-- The "item" element describes an element of a list. It create a bean added as\r
+ element to the list. Each bean can contain different properties: value, link,\r
+ icon, tooltip. These properties are to be interpreted by the jsp page using\r
+ them.\r
+ By default the bean is of type\r
+ "org.apache.struts.tiles.beans.SimpleMenuItem". This bean is useful to\r
+ create a list of beans used as menu items.\r
+\r
+ classtype The fully qualified classtype for this bean.\r
+ If specified, the classtype must be a subclass of the interface\r
+ "org.apache.struts.tiles.beans.MenuItem".\r
+\r
+ icon The bean 'icon' property.\r
+\r
+ link The bean 'link' property.\r
+\r
+ tooltip The bean 'tooltip' property.\r
+\r
+ value The bean 'value' property.\r
+-->\r
+<!ELEMENT item (#PCDATA)>\r
+<!ATTLIST item id ID #IMPLIED>\r
+<!ATTLIST item classtype %ClassName; #IMPLIED>\r
+<!ATTLIST item icon CDATA #IMPLIED>\r
+<!ATTLIST item link CDATA #REQUIRED>\r
+<!ATTLIST item tooltip CDATA #IMPLIED>\r
+<!ATTLIST item value CDATA #REQUIRED>\r
+\r
+\r
+<!-- ========== Info Elements ====================================== -->\r
+\r
+<!-- The "description" element contains descriptive (paragraph length) text\r
+ about the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT description (#PCDATA)>\r
+<!ATTLIST description id ID #IMPLIED>\r
+\r
+\r
+<!-- The "display-name" element contains a short (one line) description of\r
+ the surrounding element, suitable for use in GUI tools.\r
+-->\r
+<!ELEMENT display-name (#PCDATA)>\r
+<!ATTLIST display-name id ID #IMPLIED>\r
+\r
+\r
+<!-- The "icon" element contains a small-icon and large-icon element which\r
+ specify the location, relative to the Struts configuration file, for small\r
+ and large images used to represent the surrounding element in GUI tools.\r
+-->\r
+<!ELEMENT icon (small-icon?, large-icon?)>\r
+<!ATTLIST icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "large-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a large (32x32 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT large-icon (%Location;)>\r
+<!ATTLIST large-icon id ID #IMPLIED>\r
+\r
+\r
+<!-- The "small-icon" element specifies the location, relative to the Struts\r
+ configuration file, of a resource containing a small (16x16 pixel)\r
+ icon image.\r
+-->\r
+<!ELEMENT small-icon (%Location;)>\r
+<!ATTLIST small-icon id ID #IMPLIED>\r
--- /dev/null
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ \r
+ Refer to the below DTD Instead:\r
+ \r
+ <!DOCTYPE form-validation PUBLIC\r
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"\r
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">\r
+\r
+\r
+ $Id: validation_1_1.dtd,v 1.5 2002/11/14 20:33:13 rleland Exp $\r
+-->\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "form-validation" element is the root of the configuration file\r
+ hierarchy, and contains nested elements for all of the other\r
+ configuration settings.\r
+-->\r
+<!ELEMENT form-validation (global*, formset+)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ Global "constants" may be defined for use of other elements.\r
+-->\r
+<!ELEMENT global (constant*)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "constant" element defines a static value that can be used as\r
+ replacement parameters within "field" elements. The "constant-name" and\r
+ "constant-value" elements define the constant's reference id and\r
+ replacement value.\r
+-->\r
+<!ELEMENT constant (constant-name, constant-value)>\r
+<!ELEMENT constant-name (#PCDATA)>\r
+<!ELEMENT constant-value (#PCDATA)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "formset" element defines a set of forms for a locale. Formsets for\r
+ specific locales can override only those fields that change. The\r
+ localization is properly scoped, so that a formset can override just the\r
+ language, or just the country, or both.\r
+-->\r
+<!ELEMENT formset (constant*, form+)>\r
+<!ATTLIST formset language CDATA #IMPLIED\r
+ country CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "form" element defines a set of fields to be validated. The name\r
+ corresponds to the identifer the application assigns to the form. In the\r
+ case of the Struts framework, this is the attribute property from\r
+ the ActionMapping. Struts also offers the alternative of using the\r
+ the path property as the Validator form name.\r
+-->\r
+<!ELEMENT form (field+ )>\r
+<!ATTLIST form name CDATA #REQUIRED>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "field" element defines the properties to be validated. In a\r
+ web application, a field would also correspond to a control on\r
+ a HTML form. To validate the properties, the validator works through\r
+ a JavaBean representation, like a Struts ActionForm. The field element\r
+ can accept up to 4 attributes:\r
+\r
+ property The property on the JavaBean corresponding to this\r
+ field element.\r
+\r
+ depends The comma-delimited list of validators to apply against\r
+ this field. For the field to succeed, all the\r
+ validators must succeed.\r
+\r
+ page The JavaBean corresponding to this form may include\r
+ a page property. Only fields with a "page" attribute\r
+ value that is equal to or less than the page property\r
+ on the form JavaBean are processed. This is useful when\r
+ using a "wizard" approach to completing a large form,\r
+ to ensure that a page is not skipped.\r
+ [0]\r
+\r
+ indexedListProperty\r
+ The "indexedListProperty" is the method name that will\r
+ return an array or a Collection used to retrieve the\r
+ list and then loop through the list performing the\r
+ validations for this field.\r
+\r
+ fieldOrder [:FIXME: is this still supported?]\r
+-->\r
+<!ELEMENT field (msg?, arg0?, arg1?, arg2?, arg3?, var* )>\r
+<!ATTLIST field property CDATA #REQUIRED\r
+ depends CDATA #IMPLIED\r
+ page CDATA #IMPLIED\r
+ indexedListProperty CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "msg" element defines a custom message key to use when one of the\r
+ validators for this field fails. Each validator has a default message\r
+ property that is used when a corresonding field msg is not specified.\r
+ Each validator applied to a field may have its own msg element.\r
+ The msg element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT msg EMPTY>\r
+<!ATTLIST msg name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg0" element defines the first replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg0 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg0 EMPTY>\r
+<!ATTLIST arg0 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg1" element defines the second replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg1 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg1 EMPTY>\r
+<!ATTLIST arg1 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg2" element defines the third replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg2 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg2 EMPTY>\r
+<!ATTLIST arg2 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg3" element defines the fourth replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg0 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg3 EMPTY>\r
+<!ATTLIST arg3 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "var" element can set parameters that a field may need to pass to\r
+ one of its validators, such as the minimum and maximum values in a\r
+ range validation. These parameters may also be referenced by one of the\r
+ arg? elements using a shell syntax: ${var:var-name}.\r
+-->\r
+<!ELEMENT var (var-name, var-value)>\r
+\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The name of the var parameter to provide to a field's validators.\r
+-->\r
+<!ELEMENT var-name (#PCDATA)>\r
+\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The value of the var parameter to provide to a field's validators.\r
+-->\r
+<!ELEMENT var-value (#PCDATA)>\r
+\r
+<!-- eof -->
\ No newline at end of file
--- /dev/null
+<!DOCTYPE form-validation PUBLIC\r
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"\r
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">\r
+<!--\r
+\r
+ This file contains the default Struts Validator pluggable validator\r
+ definitions. It should be placed somewhere under /WEB-INF and\r
+ referenced in the struts-config.xml under the plug-in element\r
+ for the ValidatorPlugIn.\r
+\r
+ <plug-in className="org.apache.struts.validator.ValidatorPlugIn">\r
+ <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,\r
+ /WEB-INF/validation.xml"/>\r
+ </plug-in>\r
+\r
+ These are the default error messages associated with\r
+ each validator defined in this file. They should be\r
+ added to your projects ApplicationResources.properties\r
+ file or you can associate new ones by modifying the\r
+ pluggable validators msg attributes in this file.\r
+\r
+ # Struts Validator Error Messages\r
+ errors.required={0} is required.\r
+ errors.minlength={0} can not be less than {1} characters.\r
+ errors.maxlength={0} can not be greater than {1} characters.\r
+ errors.invalid={0} is invalid.\r
+\r
+ errors.byte={0} must be a byte.\r
+ errors.short={0} must be a short.\r
+ errors.integer={0} must be an integer.\r
+ errors.long={0} must be a long.\r
+ errors.float={0} must be a float.\r
+ errors.double={0} must be a double.\r
+\r
+ errors.date={0} is not a date.\r
+ errors.range={0} is not in the range {1} through {2}.\r
+ errors.creditcard={0} is an invalid credit card number.\r
+ errors.email={0} is an invalid e-mail address.\r
+\r
+-->\r
+\r
+<form-validation>\r
+\r
+ <global>\r
+\r
+ <validator name="required"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateRequired"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ msg="errors.required">\r
+\r
+ <javascript><![CDATA[\r
+ function validateRequired(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRequired = new required();\r
+ for (x in oRequired) {\r
+ var field = form[oRequired[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'file' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio' ||\r
+ field.type == 'password') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (trim(value).length == 0) {\r
+ \r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRequired[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }\r
+ \r
+ // Trim whitespace from left and right sides of s.\r
+ function trim(s) {\r
+ return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );\r
+ }\r
+ \r
+ ]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="requiredif"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateRequiredIf"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ org.apache.commons.validator.Validator,\r
+ javax.servlet.http.HttpServletRequest"\r
+ msg="errors.required">\r
+ </validator>\r
+\r
+ <validator name="minlength"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMinLength"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.minlength">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMinLength(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMinLength = new minlength();\r
+ for (x in oMinLength) {\r
+ var field = form[oMinLength[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea') {\r
+ \r
+ var iMin = parseInt(oMinLength[x][2]("minlength"));\r
+ if ((trim(field.value).length > 0) && (field.value.length < iMin)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMinLength[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="maxlength"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMaxLength"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.maxlength">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMaxLength(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMaxLength = new maxlength();\r
+ for (x in oMaxLength) {\r
+ var field = form[oMaxLength[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea') {\r
+ \r
+ var iMax = parseInt(oMaxLength[x][2]("maxlength"));\r
+ if (field.value.length > iMax) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMaxLength[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="mask"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateMask"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.invalid">\r
+\r
+ <javascript><![CDATA[\r
+ function validateMask(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oMasked = new mask();\r
+ for (x in oMasked) {\r
+ var field = form[oMasked[x][0]];\r
+ \r
+ if ((field.type == 'text' || \r
+ field.type == 'textarea') && \r
+ (field.value.length > 0)) {\r
+ \r
+ if (!matchPattern(field.value, oMasked[x][2]("mask"))) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oMasked[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ \r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }\r
+\r
+ function matchPattern(value, mask) {\r
+ return mask.exec(value);\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="byte"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateByte"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.byte"\r
+ jsFunctionName="ByteValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateByte(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oByte = new ByteValidations();\r
+ for (x in oByte) {\r
+ var field = form[oByte[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+\r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oByte[x][1];\r
+\r
+ } else {\r
+\r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oByte[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ \r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="short"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateShort"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.short"\r
+ jsFunctionName="ShortValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateShort(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oShort = new ShortValidations();\r
+ for (x in oShort) {\r
+ var field = form[oShort[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oShort[x][1];\r
+\r
+ } else {\r
+ \r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oShort[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="integer"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateInteger"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.integer"\r
+ jsFunctionName="IntegerValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateInteger(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oInteger = new IntegerValidations();\r
+ for (x in oInteger) {\r
+ var field = form[oInteger[x][0]];\r
+\r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ \r
+ if (!isAllDigits(value)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oInteger[x][1];\r
+ \r
+ } else {\r
+ var iValue = parseInt(value);\r
+ if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oInteger[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ function isAllDigits(argvalue) {\r
+ argvalue = argvalue.toString();\r
+ var validChars = "0123456789";\r
+ var startFrom = 0;\r
+ if (argvalue.substring(0, 2) == "0x") {\r
+ validChars = "0123456789abcdefABCDEF";\r
+ startFrom = 2;\r
+ } else if (argvalue.charAt(0) == "0") {\r
+ validChars = "01234567";\r
+ startFrom = 1;\r
+ } else if (argvalue.charAt(0) == "-") {\r
+ startFrom = 1;\r
+ }\r
+ \r
+ for (var n = startFrom; n < argvalue.length; n++) {\r
+ if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="long"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateLong"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.long"/>\r
+\r
+\r
+ <validator name="float"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateFloat"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.float"\r
+ jsFunctionName="FloatValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateFloat(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oFloat = new FloatValidations();\r
+ for (x in oFloat) {\r
+ var field = form[oFloat[x][0]];\r
+ \r
+ if (field.type == 'text' ||\r
+ field.type == 'textarea' ||\r
+ field.type == 'select-one' ||\r
+ field.type == 'radio') {\r
+ \r
+ var value = '';\r
+ // get field's value\r
+ if (field.type == "select-one") {\r
+ var si = field.selectedIndex;\r
+ if (si >= 0) {\r
+ value = field.options[si].value;\r
+ }\r
+ } else {\r
+ value = field.value;\r
+ }\r
+ \r
+ if (value.length > 0) {\r
+ // remove '.' before checking digits\r
+ var tempArray = value.split('.');\r
+ var joinedString= tempArray.join('');\r
+\r
+ if (!isAllDigits(joinedString)) {\r
+ bValid = false;\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oFloat[x][1];\r
+\r
+ } else {\r
+ var iValue = parseFloat(value);\r
+ if (isNaN(iValue)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oFloat[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="double"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateDouble"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.double"/>\r
+\r
+\r
+ <validator name="date"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateDate"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.date"\r
+ jsFunctionName="DateValidations">\r
+\r
+ <javascript><![CDATA[\r
+ function validateDate(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oDate = new DateValidations();\r
+ for (x in oDate) {\r
+ var value = form[oDate[x][0]].value;\r
+ var datePattern = oDate[x][2]("datePatternStrict");\r
+ if ((form[oDate[x][0]].type == 'text' ||\r
+ form[oDate[x][0]].type == 'textarea') &&\r
+ (value.length > 0) &&\r
+ (datePattern.length > 0)) {\r
+ var MONTH = "MM";\r
+ var DAY = "dd";\r
+ var YEAR = "yyyy";\r
+ var orderMonth = datePattern.indexOf(MONTH);\r
+ var orderDay = datePattern.indexOf(DAY);\r
+ var orderYear = datePattern.indexOf(YEAR);\r
+ if ((orderDay < orderYear && orderDay > orderMonth)) {\r
+ var iDelim1 = orderMonth + MONTH.length;\r
+ var iDelim2 = orderDay + DAY.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderDay && iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");\r
+ } else if (iDelim1 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");\r
+ } else if (iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[2], matched[1], matched[3])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else if ((orderMonth < orderYear && orderMonth > orderDay)) {\r
+ var iDelim1 = orderDay + DAY.length;\r
+ var iDelim2 = orderMonth + MONTH.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderMonth && iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");\r
+ } else if (iDelim1 == orderMonth) {\r
+ dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");\r
+ } else if (iDelim2 == orderYear) {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[1], matched[2], matched[3])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else if ((orderMonth > orderYear && orderMonth < orderDay)) {\r
+ var iDelim1 = orderYear + YEAR.length;\r
+ var iDelim2 = orderMonth + MONTH.length;\r
+ var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);\r
+ var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);\r
+ if (iDelim1 == orderMonth && iDelim2 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");\r
+ } else if (iDelim1 == orderMonth) {\r
+ dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");\r
+ } else if (iDelim2 == orderDay) {\r
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");\r
+ } else {\r
+ dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");\r
+ }\r
+ var matched = dateRegexp.exec(value);\r
+ if(matched != null) {\r
+ if (!isValidDate(matched[3], matched[2], matched[1])) {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ } else {\r
+ if (i == 0) {\r
+ focusField = form[oDate[x][0]];\r
+ }\r
+ fields[i++] = oDate[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ function isValidDate(day, month, year) {\r
+ if (month < 1 || month > 12) {\r
+ return false;\r
+ }\r
+ if (day < 1 || day > 31) {\r
+ return false;\r
+ }\r
+ if ((month == 4 || month == 6 || month == 9 || month == 11) &&\r
+ (day == 31)) {\r
+ return false;\r
+ }\r
+ if (month == 2) {\r
+ var leap = (year % 4 == 0 &&\r
+ (year % 100 != 0 || year % 400 == 0));\r
+ if (day>29 || (day == 29 && !leap)) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+<!-- range is deprecated use intRange instead -->\r
+ <validator name="range"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateIntRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="integer"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateRange(form) {\r
+ return validateIntRange(form);\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="intRange"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateIntRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="integer"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateIntRange(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRange = new intRange();\r
+ for (x in oRange) {\r
+ var field = form[oRange[x][0]];\r
+ \r
+ if ((field.type == 'text' ||\r
+ field.type == 'textarea') &&\r
+ (field.value.length > 0)) {\r
+ \r
+ var iMin = parseInt(oRange[x][2]("min"));\r
+ var iMax = parseInt(oRange[x][2]("max"));\r
+ var iValue = parseInt(field.value);\r
+ if (!(iValue >= iMin && iValue <= iMax)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRange[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="floatRange"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateFloatRange"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends="float"\r
+ msg="errors.range">\r
+\r
+ <javascript><![CDATA[\r
+ function validateFloatRange(form) {\r
+ var isValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oRange = new floatRange();\r
+ for (x in oRange) {\r
+ var field = form[oRange[x][0]];\r
+ \r
+ if ((field.type == 'text' ||\r
+ field.type == 'textarea') &&\r
+ (field.value.length > 0)) {\r
+ \r
+ var fMin = parseFloat(oRange[x][2]("min"));\r
+ var fMax = parseFloat(oRange[x][2]("max"));\r
+ var fValue = parseFloat(field.value);\r
+ if (!(fValue >= fMin && fValue <= fMax)) {\r
+ if (i == 0) {\r
+ focusField = field;\r
+ }\r
+ fields[i++] = oRange[x][1];\r
+ isValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return isValid;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ <validator name="creditCard"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateCreditCard"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.creditcard">\r
+\r
+ <javascript><![CDATA[\r
+ function validateCreditCard(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oCreditCard = new creditCard();\r
+ for (x in oCreditCard) {\r
+ if ((form[oCreditCard[x][0]].type == 'text' ||\r
+ form[oCreditCard[x][0]].type == 'textarea') &&\r
+ (form[oCreditCard[x][0]].value.length > 0)) {\r
+ if (!luhnCheck(form[oCreditCard[x][0]].value)) {\r
+ if (i == 0) {\r
+ focusField = form[oCreditCard[x][0]];\r
+ }\r
+ fields[i++] = oCreditCard[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ /**\r
+ * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl\r
+ */\r
+ function luhnCheck(cardNumber) {\r
+ if (isLuhnNum(cardNumber)) {\r
+ var no_digit = cardNumber.length;\r
+ var oddoeven = no_digit & 1;\r
+ var sum = 0;\r
+ for (var count = 0; count < no_digit; count++) {\r
+ var digit = parseInt(cardNumber.charAt(count));\r
+ if (!((count & 1) ^ oddoeven)) {\r
+ digit *= 2;\r
+ if (digit > 9) digit -= 9;\r
+ };\r
+ sum += digit;\r
+ };\r
+ if (sum == 0) return false;\r
+ if (sum % 10 == 0) return true;\r
+ };\r
+ return false;\r
+ }\r
+\r
+ function isLuhnNum(argvalue) {\r
+ argvalue = argvalue.toString();\r
+ if (argvalue.length == 0) {\r
+ return false;\r
+ }\r
+ for (var n = 0; n < argvalue.length; n++) {\r
+ if ((argvalue.substring(n, n+1) < "0") ||\r
+ (argvalue.substring(n,n+1) > "9")) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+\r
+ <validator name="email"\r
+ classname="org.apache.struts.validator.FieldChecks"\r
+ method="validateEmail"\r
+ methodParams="java.lang.Object,\r
+ org.apache.commons.validator.ValidatorAction,\r
+ org.apache.commons.validator.Field,\r
+ org.apache.struts.action.ActionErrors,\r
+ javax.servlet.http.HttpServletRequest"\r
+ depends=""\r
+ msg="errors.email">\r
+\r
+ <javascript><![CDATA[\r
+ function validateEmail(form) {\r
+ var bValid = true;\r
+ var focusField = null;\r
+ var i = 0;\r
+ var fields = new Array();\r
+ oEmail = new email();\r
+ for (x in oEmail) {\r
+ if ((form[oEmail[x][0]].type == 'text' ||\r
+ form[oEmail[x][0]].type == 'textarea') &&\r
+ (form[oEmail[x][0]].value.length > 0)) {\r
+ if (!checkEmail(form[oEmail[x][0]].value)) {\r
+ if (i == 0) {\r
+ focusField = form[oEmail[x][0]];\r
+ }\r
+ fields[i++] = oEmail[x][1];\r
+ bValid = false;\r
+ }\r
+ }\r
+ }\r
+ if (fields.length > 0) {\r
+ focusField.focus();\r
+ alert(fields.join('\n'));\r
+ }\r
+ return bValid;\r
+ }\r
+\r
+ /**\r
+ * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),\r
+ * http://javascript.internet.com\r
+ */\r
+ function checkEmail(emailStr) {\r
+ if (emailStr.length == 0) {\r
+ return true;\r
+ }\r
+ var emailPat=/^(.+)@(.+)$/;\r
+ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";\r
+ var validChars="\[^\\s" + specialChars + "\]";\r
+ var quotedUser="(\"[^\"]*\")";\r
+ var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;\r
+ var atom=validChars + '+';\r
+ var word="(" + atom + "|" + quotedUser + ")";\r
+ var userPat=new RegExp("^" + word + "(\\." + word + ")*$");\r
+ var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");\r
+ var matchArray=emailStr.match(emailPat);\r
+ if (matchArray == null) {\r
+ return false;\r
+ }\r
+ var user=matchArray[1];\r
+ var domain=matchArray[2];\r
+ if (user.match(userPat) == null) {\r
+ return false;\r
+ }\r
+ var IPArray = domain.match(ipDomainPat);\r
+ if (IPArray != null) {\r
+ for (var i = 1; i <= 4; i++) {\r
+ if (IPArray[i] > 255) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ var domainArray=domain.match(domainPat);\r
+ if (domainArray == null) {\r
+ return false;\r
+ }\r
+ var atomPat=new RegExp(atom,"g");\r
+ var domArr=domain.match(atomPat);\r
+ var len=domArr.length;\r
+ if ((domArr[domArr.length-1].length < 2) ||\r
+ (domArr[domArr.length-1].length > 3)) {\r
+ return false;\r
+ }\r
+ if (len < 2) {\r
+ return false;\r
+ }\r
+ return true;\r
+ }]]>\r
+ </javascript>\r
+\r
+ </validator>\r
+\r
+ </global>\r
+\r
+</form-validation>\r
--- /dev/null
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ \r
+ Refer to the below DTD Instead:\r
+ \r
+ <!DOCTYPE form-validation PUBLIC\r
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"\r
+ "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">\r
+\r
+\r
+ $Id: validator-rules_1_1.dtd,v 1.6 2002/11/14 20:33:13 rleland Exp $\r
+-->\r
+\r
+\r
+<!-- =================================================== Top Level Elements -->\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "form-validation" element is the root of the configuration file\r
+ hierarchy, and contains nested elements for all of the other\r
+ configuration settings.\r
+-->\r
+<!ELEMENT form-validation (global+)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The elements defined here are all global and must be nested within a\r
+ "global" element.\r
+-->\r
+<!ELEMENT global (validator+)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "validator" element defines what validators objects can be used with\r
+ the fields referenced by the formset elements. The validator element can\r
+ accept 4 properties: name, classname, method, methodparams, msg, depends,\r
+ and jsFunctionName.\r
+-->\r
+<!ELEMENT validator (javascript?)>\r
+<!ATTLIST validator name CDATA #REQUIRED\r
+ classname CDATA #REQUIRED\r
+ method CDATA #REQUIRED\r
+ methodParams CDATA #REQUIRED\r
+ msg CDATA #REQUIRED\r
+ depends CDATA #IMPLIED\r
+ jsFunctionName CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "javascript" element defines a JavaScript that can be used to perform\r
+ client-side validators.\r
+-->\r
+<!ELEMENT javascript (#PCDATA)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "constant" element defines a static value that can be used as\r
+ replacement parameters within "field" elements. The "constant-name" and\r
+ "constant-value" elements define the constant's reference id and replacement\r
+ value.\r
+-->\r
+<!ELEMENT constant (constant-name, constant-value)>\r
+<!ELEMENT constant-name (#PCDATA)>\r
+<!ELEMENT constant-value (#PCDATA)>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "formset" element defines a set of forms for a locale. Formsets for\r
+ specific locales can override only those fields that change. The\r
+ localization is properly scoped, so that a formset can override just the\r
+ language, or just the country, or both.\r
+-->\r
+<!ELEMENT formset (constant*, form+)>\r
+<!ATTLIST formset language CDATA #IMPLIED\r
+ country CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "form" element defines a set of fields to be validated. The name\r
+ corresponds to the identifer the application assigns to the form. In the\r
+ case of the Struts framework, this is the attribute property from\r
+ the ActionMapping. Struts also offers the alternative of using the\r
+ the path property as the Validator form name.\r
+-->\r
+<!ELEMENT form (field+ )>\r
+<!ATTLIST form name CDATA #REQUIRED>\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "field" element defines the properties to be validated. In a\r
+ web application, a field would also correspond to a control on\r
+ a HTML form. To validate the properties, the validator works through\r
+ a JavaBean representation, like a Struts ActionForm. The field element\r
+ can accept up to 4 attributes:\r
+\r
+ property The property on the JavaBean corresponding to this\r
+ field element.\r
+\r
+ depends The comma-delimited list of validators to apply against\r
+ this field. For the field to succeed, all the\r
+ validators must succeed.\r
+\r
+ page The JavaBean corresponding to this form may include\r
+ a page property. Only fields with a "page" attribute\r
+ value that is equal to or less than the page property\r
+ on the form JavaBean are processed. This is useful when\r
+ using a "wizard" approach to completing a large form,\r
+ to ensure that a page is not skipped.\r
+ [0]\r
+\r
+ indexedListProperty\r
+ The "indexedListProperty" is the method name that will\r
+ return an array or a Collection used to retrieve the\r
+ list and then loop through the list performing the\r
+ validations for this field.\r
+\r
+ fieldOrder [:FIXME: is this still supported?]\r
+-->\r
+<!ELEMENT field (msg|arg0|arg1|arg2|arg3|var)*>\r
+<!ATTLIST field property CDATA #REQUIRED\r
+ depends CDATA #IMPLIED\r
+ page CDATA #IMPLIED\r
+ indexedListProperty CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "msg" element defines a custom message key to use when one of the\r
+ validators for this field fails. Each validator has a default message\r
+ property that is used when a corresonding field msg is not specified.\r
+ Each validator applied to a field may have its own msg element.\r
+ The msg element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT msg EMPTY>\r
+<!ATTLIST msg name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg0" element defines the first replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg0 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg0 EMPTY>\r
+<!ATTLIST arg0 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg1" element defines the second replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg1 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg1 EMPTY>\r
+<!ATTLIST arg1 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg2" element defines the third replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg2 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg2 EMPTY>\r
+<!ATTLIST arg2 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "arg3" element defines the fourth replacement value to use with the\r
+ message template for this validator or this field.\r
+ The arg0 element accepts up to three attributes.\r
+\r
+ name The name of the validator corresponding to this msg.\r
+\r
+ key The key that will return the message template from a\r
+ resource bundle.\r
+\r
+ resource If set to "false", the key is taken to be a literal\r
+ value rather than a bundle key.\r
+ [true]\r
+-->\r
+<!ELEMENT arg3 EMPTY>\r
+<!ATTLIST arg3 name CDATA #IMPLIED\r
+ key CDATA #IMPLIED\r
+ resource CDATA #IMPLIED >\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The "var" element can set parameters that a field may need to pass to\r
+ one of its validators, such as the minimum and maximum values in a\r
+ range validation. These parameters may also be referenced by one of the\r
+ arg? elements using a shell syntax: ${var:var-name}.\r
+-->\r
+<!ELEMENT var (var-name, var-value)>\r
+\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The name of the var parameter to provide to a field's validators.\r
+-->\r
+<!ELEMENT var-name (#PCDATA)>\r
+\r
+\r
+\r
+<!--\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED\r
+ DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED ** DEPRECATED \r
+ The value of the var parameter to provide to a field's validators.\r
+-->\r
+<!ELEMENT var-value (#PCDATA)>\r
+\r
+<!-- eof -->\r