diff options
Diffstat (limited to 'src/main/webapp')
-rw-r--r-- | src/main/webapp/WEB-INF/tlds/struts-bean.tld | 1153 | ||||
-rw-r--r-- | src/main/webapp/WEB-INF/tlds/struts-logic.tld | 1893 | ||||
-rw-r--r-- | src/main/webapp/WEB-INF/web.xml | 55 | ||||
-rw-r--r-- | src/main/webapp/images/incommon.gif | bin | 0 -> 975 bytes | |||
-rw-r--r-- | src/main/webapp/images/internet2.gif | bin | 0 -> 1204 bytes | |||
-rw-r--r-- | src/main/webapp/images/logo.jpg | bin | 0 -> 13660 bytes | |||
-rw-r--r-- | src/main/webapp/index.htm | 5 | ||||
-rw-r--r-- | src/main/webapp/wayf.css | 104 | ||||
-rw-r--r-- | src/main/webapp/wayf.jsp | 547 | ||||
-rw-r--r-- | src/main/webapp/wayferror.jsp | 38 |
10 files changed, 3795 insertions, 0 deletions
diff --git a/src/main/webapp/WEB-INF/tlds/struts-bean.tld b/src/main/webapp/WEB-INF/tlds/struts-bean.tld new file mode 100644 index 0000000..7e95a46 --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/struts-bean.tld @@ -0,0 +1,1153 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ $Id: struts-bean.tld 481833 2006-12-03 17:32:52Z niallp $
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.3</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>bean</short-name>
+ <uri>http://struts.apache.org/tags-bean</uri>
+ <description>
+ <![CDATA[
+ <p><strong>Note: Some of the features in this taglib are also
+ available in the <a href="http://java.sun.com/products/jsp/jstl/">JavaServer Pages Standard Tag Library (JSTL)</a>.
+ The Struts team encourages the use of the standard tags over the Struts
+ specific tags when possible.</strong></p>
+
+ <p>This tag library contains tags useful in accessing beans and their
+ properties, as well as defining new beans (based on these accesses)
+ that are accessible to the remainder of the page via scripting variables
+ and page scope attributes. Convenient mechanisms to create new beans
+ based on the value of request cookies, headers, and parameters are also
+ provided.</p>
+
+ <p>Many of the tags in this tag library will throw a
+ <code>JspException</code> at runtime when they are utilized incorrectly
+ (such as when you specify an invalid combination of tag attributes). JSP
+ allows you to declare an "error page" in the <code><%@ page %></code>
+ directive. If you wish to process the actual exception that caused the
+ problem, it is passed to the error page as a request attribute under key
+ <code>org.apache.struts.action.EXCEPTION</code>.</p>
+
+ ]]>
+ </description>
+ <tag>
+ <name>cookie</name>
+ <tag-class>org.apache.struts.taglib.bean.CookieTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.CookieTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Define a scripting variable based on the value(s) of the specified
+ request cookie.
+ </strong></p>
+
+ <p>Retrieve the value of the specified request cookie (as a single
+ value or multiple values, depending on the <code>multiple</code> attribute),
+ and define the result as a page scope attribute of type <code>Cookie</code>
+ (if <code>multiple</code> is not specified) or <code>Cookie[]</code>
+ (if <code>multiple</code> is specified).</p>
+
+ <p>If no cookie with the specified name can be located, and no default
+ value is specified, a request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified request cookie.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>multiple</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If any arbitrary value for this attribute is specified, causes all
+ matching cookies to be accumulated and stored into a bean of type
+ <code>Cookie[]</code>. If not specified, the first value for the
+ specified cookie will be retrieved as a value of type
+ <code>Cookie</code>.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the request cookie whose value, or values,
+ is to be retrieved.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The default cookie value to return if no cookie with the
+ specified name was included in this request.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>define</name>
+ <tag-class>org.apache.struts.taglib.bean.DefineTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.DefineTei</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Define a scripting variable based on the value(s) of the specified
+ bean property.
+ </strong></p>
+
+ <p>Create a new attribute (in the scope specified by the
+ <code>toScope</code> property, if any), and a corresponding scripting
+ variable, both of which are named by the value of the <code>id</code>
+ attribute. The corresponding value to which this new attribute (and
+ scripting variable) is set are specified via use of exactly one of the
+ following approaches (trying to use more than one will result in a
+ JspException being thrown):</p>
+ <ul>
+ <li>Specify a <code>name</code> attribute (plus optional
+ <code>property</code> and <code>scope</code> attributes) -
+ The created attribute and scripting variable will be of the type of the
+ retrieved JavaBean property, unless it is a Java primitive type,
+ in which case it will be wrapped in the appropriate wrapper class
+ (i.e. int is wrapped by java.lang.Integer).</li>
+ <li>Specify a <code>value</code> attribute - The created attribute and
+ scripting variable will be of type <code>java.lang.String</code>,
+ set to the value of this attribute.</li>
+ <li>Specify nested body content - The created attribute and scripting
+ variable will be of type <code>java.lang.String</code>, set to
+ the value of the nested body content.</li>
+ </ul>
+
+ <p>If a problem occurs while retrieving the specified bean property, a
+ request time exception will be thrown.</p>
+
+ <p>The <code><bean:define></code> tag differs from
+ <code><jsp:useBean></code> in several ways, including:</p>
+ <ul>
+ <li>Unconditionally creates (or replaces) a bean under the
+ specified identifier.</li>
+ <li>Can create a bean with the value returned by a property getter
+ of a different bean (including properties referenced with a
+ nested and/or indexed property name).</li>
+ <li>Can create a bean whose contents is a literal string (or the result
+ of a runtime expression) specified by the <code>value</code>
+ attribute.</li>
+ <li>Does not support nested content (such as
+ <code><jsp:setProperty></code> tags) that are only executed
+ if a bean was actually created.</li>
+ </ul>
+
+ <p><strong>USAGE NOTE</strong> - There is a restriction in the JSP 1.1
+ Specification that disallows using the same value for an <code>id</code>
+ attribute more than once in a single JSP page. Therefore, you will not
+ be able to use <code><bean:define></code> for the same bean
+ name more than once in a single page.</p>
+
+ <p><strong>USAGE NOTE</strong> - If you use another tag to create the
+ body content (e.g. bean:write), that tag must return a non-empty String.
+ An empty String equates to an empty body or a null String, and a new
+ scripting variable cannot be defined as null. Your bean must return a
+ non-empty String, or the define tag must be wrapped within a logic tag
+ to test for an empty or null value.</p>
+
+ <p><strong>USAGE NOTE</strong> - You cannot use bean:define to <strong>instantiate</strong>
+ a DynaActionForm (type="org.apache.struts.action.DynaActionForm") with
+ the properties specified in the struts-config. The mechanics of creating
+ the dyna-properties is complex and cannot be handled by a no-argument
+ constructor. If you need to create an ActionForm this way, you must use
+ a conventional ActionForm.
+ </p>
+
+ <p>See the Bean Developer's Guide section on
+ <a href="../api/org/apache/struts/taglib/bean/package-summary.html#doc.Creation">
+ bean creation</a> for more information about these differences, as well
+ as alternative approaches to introducing beans into a JSP page.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified property.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the attribute name of the bean whose property is accessed
+ to define a new page scope attribute (if <code>property</code> is also
+ specified) or the attribute name of the bean that is duplicated with
+ the new reference created by this tag (if <code>property</code> is not
+ also specified). This attribute is required unless you specify
+ a <code>value</code> attribute or nested body content.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the property to be accessed on the bean
+ specified by <code>name</code>. This value may be a simple, indexed,
+ or nested property reference expression. If not specified, the bean
+ identified by <code>name</code> is given a new reference identified by
+ <code>id</code>.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the variable scope searched to retrieve the bean specified
+ by <code>name</code>. If not specified, the default rules applied by
+ <code>PageContext.findAttribute()</code> are applied.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>toScope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the variable scope into which the newly defined bean will
+ be created. If not specified, the bean will be created in
+ <code>page</code> scope.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the fully qualified class name of the value to be exposed
+ as the <code>id</code> attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The <code>java.lang.String</code> value to which the exposed bean
+ should be set. This attribute is required unless you specify the
+ <code>name</code> attribute or nested body content.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>header</name>
+ <tag-class>org.apache.struts.taglib.bean.HeaderTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.HeaderTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Define a scripting variable based on the value(s) of the specified
+ request header.
+ </strong></p>
+
+ <p>Retrieve the value of the specified request header (as a single
+ value or multiple values, depending on the <code>multiple</code> attribute),
+ and define the result as a page scope attribute of type <code>String</code>
+ (if <code>multiple</code> is not specified) or <code>String[]</code>
+ (if <code>multiple</code> is specified).</p>
+
+ <p>If no header with the specified name can be located, and no default
+ value is specified, a request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified request header.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>multiple</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If any arbitrary value for this attribute is specified, causes a call
+ to <code>HttpServletRequest.getHeaders()</code> and a definition of the
+ result as a bean of type <code>String[]</code>. Otherwise,
+ <code>HttpServletRequest.getHeader()</code> will be called, and a
+ definition of the result as a bean of type <code>String</code>
+ will be performed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the request header whose value, or values,
+ is to be retrieved.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The default header value to return if no header with the
+ specified name was included in this request.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>include</name>
+ <tag-class>org.apache.struts.taglib.bean.IncludeTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.IncludeTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Load the response from a dynamic application request and make it available
+ as a bean.
+ </strong></p>
+
+ <p>Perform an internal dispatch to the specified application component
+ (or external URL)
+ and make the response data from that request available as a bean of
+ type <code>String</code>. This tag has a function similar to that of
+ the standard <code><jsp:include></code> tag, except that the
+ response data is stored in a page scope attribute instead of being
+ written to the output stream. If the current request is part of a
+ session, the generated request for the include will also include the
+ session identifier (and thus be part of the same session).</p>
+
+ <p>The URL used to access the specified application component is
+ calculated based on which of the following attributes you specify
+ (you must specify exactly one of them):</p>
+ <ul>
+ <li><em>forward</em> - Use the value of this attribute as the name
+ of a global <code>ActionForward</code> to be looked up, and
+ use the module-relative or context-relative URI found there.</li>
+ <li><em>href</em> - Use the value of this attribute unchanged (since
+ this might link to a resource external to the application, the
+ session identifier is <strong>not</strong> included.</li>
+ <li><em>page</em> - Use the value of this attribute as an
+ module-relative URI to the desired resource.</li>
+ </ul>
+ ]]>
+ </description>
+ <attribute>
+ <name>anchor</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Optional anchor tag ("#xxx") to be added to the generated
+ hyperlink. Specify this value <strong>without</strong> any
+ "#" character.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>forward</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Logical name of a global <code>ActionForward</code> that contains
+ the actual content-relative URI of the resource to be included.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>href</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Absolute URL (including the appropriate protocol prefix such as
+ "http:") of the resource to be included. Because this URL could be
+ external to the current web application, the session identifier will
+ <strong>not</strong> be included in the request.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified web application resource.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>page</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Module-relative URI (starting with a '/') of the web application
+ resource to be included.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>transaction</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>Set to <code>true</code> if you want the current
+ transaction control token included in the generated
+ URL for this include.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>message</name>
+ <tag-class>org.apache.struts.taglib.bean.MessageTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Render an internationalized message string to the response.
+ </strong></p>
+
+ <p>Retrieves an internationalized message for the specified locale,
+ using the specified message key, and write it to the output stream.
+ Up to five parametric replacements (such as "{0}") may be specified.</p>
+
+ <p>The message key may be specified directly, using the <code>key</code>
+ attribute, or indirectly, using the <code>name</code> and
+ <code>property</code> attributes to obtain it from a bean.</p>
+
+ <p>
+ <strong>JSTL</strong>: The equivalent JSTL tag is <fmt:message>. For example,
+ <br/>
+ <code>
+ <fmt:message key="my.msg.key">
+ <fmt:param value="replacement text"/>
+ </fmt:message>
+ </code>
+ </p>
+ ]]>
+ </description>
+ <attribute>
+ <name>arg0</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>First parametric replacement value, if any.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>arg1</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Second parametric replacement value, if any.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>arg2</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Third parametric replacement value, if any.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>arg3</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Fourth parametric replacement value, if any.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>arg4</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Fifth parametric replacement value, if any.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>bundle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the application scope bean under which the
+ <code>MessageResources</code> object containing our messages
+ is stored.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>key</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The message key of the requested message, which must have
+ a corresponding value in the message resources. If not specified,
+ the key is obtained from the <code>name</code> and
+ <code>property</code> attributes.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>locale</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the session scope bean under which our currently
+ selected <code>Locale</code> object is stored.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the attribute name of the bean whose property is accessed
+ to retrieve the value specified by <code>property</code> (if
+ specified). If <code>property</code> is not specified, the value of
+ this bean itself will be used as the message resource key.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the property to be accessed on the bean
+ specified by <code>name</code>. This value may be a simple, indexed,
+ or nested property reference expression. If not specified, the value
+ of the bean identified by <code>name</code> will itself be used as the
+ message resource key.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the variable scope searched to retrieve the bean specified
+ by <code>name</code>. If not specified, the default rules applied by
+ <code>PageContext.findAttribute()</code> are applied.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>page</name>
+ <tag-class>org.apache.struts.taglib.bean.PageTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.PageTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Expose a specified item from the page context as a bean.
+ </strong></p>
+
+ <p>Retrieve the value of the specified item from the page context
+ for this page, and define it as a scripting variable, and a page scope
+ attribute accessible to the remainder of the current page.</p>
+
+ <p>If a problem occurs while retrieving the specified configuration
+ object, a request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated
+ page scope attribute) that will be made available with the value of
+ the specified page context property.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Name of the property from our page context to be retrieved and
+ exposed. Must be one of <code>application</code>, <code>config</code>,
+ <code>request</code>, <code>response</code>, or <code>session</code>.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>parameter</name>
+ <tag-class>org.apache.struts.taglib.bean.ParameterTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.ParameterTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Define a scripting variable based on the value(s) of the specified
+ request parameter.
+ </strong></p>
+
+ <p>Retrieve the value of the specified request parameter (as a single
+ value or multiple values, depending on the <code>multiple</code> attribute),
+ and define the result as a page scope attribute of type <code>String</code>
+ (if <code>multiple</code> is not specified) or <code>String[]</code>
+ (if <code>multiple</code> is specified).</p>
+
+ <p>If no request parameter with the specified name can be located, and
+ no default value is specified, a request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified request parameter.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>multiple</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If any arbitrary value for this attribute is specified, causes a call
+ to <code>ServletRequest.getParameterValues()</code> and a definition of
+ the result as a bean of type <code>String[]</code>. Otherwise,
+ <code>ServletRequest.getParameter()</code> will be called, and a
+ definition of the result as a bean of type <code>String</code>
+ will be performed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the request parameter whose value, or values,
+ is to be retrieved.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The default parameter value to return if no parameter with the
+ specified name was included in this request.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>resource</name>
+ <tag-class>org.apache.struts.taglib.bean.ResourceTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.ResourceTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Load a web application resource and make it available as a bean.
+ </strong></p>
+
+ <p>Retrieve the value of the specified web application resource, and make
+ it available as either a <code>InputStream</code> or a <code>String</code>,
+ depending on the value of the <code>input</code> attribute.</p>
+
+ <p>If a problem occurs while retrieving the specified resource, a
+ request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated page
+ scope attribute) that will be made available with the value of the
+ specified web application resource.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>input</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If any arbitrary value for this attribute is specified, the resource
+ will be made available as an <code>InputStream</code>. If this
+ attribute is not specified, the resource will be made available
+ as a <code>String</code>.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Module-relative name (starting with a '/') of the web application
+ resource to be loaded and made available.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>size</name>
+ <tag-class>org.apache.struts.taglib.bean.SizeTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.SizeTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Define a bean containing the number of elements in a Collection or Map.
+ </strong></p>
+
+ <p>Given a reference to an array, Collection or Map, creates a new bean, of
+ type <code>java.lang.Integer</code>, whose value is the number of elements
+ in that collection. You can specify the collection to be counted in any
+ one of the following ways:</p>
+ <ul>
+ <li>As a runtime expression specified as the value of the
+ <code>collection</code> attribute.</li>
+ <li>As a JSP bean specified by the <code>name</code> attribute.</li>
+ <li>As the property, specified by the <code>property</code> attribute,
+ of the JSP bean specified by the <code>name</code> attribute.</li>
+ </ul>
+ ]]>
+ </description>
+ <attribute>
+ <name>collection</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.Object</type>
+ <description>
+ <![CDATA[
+ <p>A runtime expression that evaluates to an array, a Collection, or
+ a Map.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a page scope JSP bean, of type
+ <code>java.lang.Integer</code>, that will be created to contain the
+ size of the underlying collection being counted.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the JSP bean (optionally constrained to the scope
+ specified by the <code>scope</code> attribute) that contains the
+ collection to be counted (if <code>property</code> is not specified),
+ or whose property getter is called to return the collection to be
+ counted (if <code>property</code> is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the property, of the bean specified by the
+ <code>name</code> attribute, whose getter method will return the
+ collection to be counted.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the JSP bean specified
+ by the <code>name</code> attribute. If not specified, the available
+ scopes are searched in ascending sequence.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>struts</name>
+ <tag-class>org.apache.struts.taglib.bean.StrutsTag</tag-class>
+ <tei-class>org.apache.struts.taglib.bean.StrutsTei</tei-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Expose a named Struts internal configuration object as a bean.
+ </strong></p>
+
+ <p>Retrieve the value of the specified Struts internal configuration
+ object, and define it as a scripting variable and as a page scope
+ attribute accessible to the remainder of the current page. You must
+ specify exactly one of the <code>formBean</code>, <code>forward</code>,
+ and <code>mapping</code> attributes to select the configuration object
+ to be exposed.</p>
+
+ <p>If a problem occurs while retrieving the specified configuration
+ object, a request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the scripting variable (and associated
+ page scope attribute) that will be made available with the value of
+ the specified Struts internal configuration object.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>formBean</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the Struts <code>ActionFormBean</code>
+ definition object to be exposed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>forward</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the global Struts <code>ActionForward</code>
+ definition object to be exposed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>mapping</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the matching path of the Struts <code>ActionMapping</code>
+ definition object to be exposed.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>write</name>
+ <tag-class>org.apache.struts.taglib.bean.WriteTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Render the value of the specified bean property to the current
+ JspWriter.
+ </strong></p>
+
+ <p>Retrieve the value of the specified bean property, and render it to the
+ current JspWriter as a String by the ways:</p>
+ <ul>
+ <li>If <code>format</code> attribute exists then value will be formatted on base of format
+ string from <code>format</code> attribute and default system locale.</li>
+ <li>If in resources exists format string for value data type (view <code>format</code>
+ attribute description) then value will be formatted on base of format string
+ from resources. Resources bundle and target locale can be specified with
+ <code>bundle</code> and <code>locale</code> attributes. If nothing specified then
+ default resource bundle and current user locale will be used.</li>
+ <li>If there is a PropertyEditor configured for the property value's class, the
+ <code>getAsText()</code> method will be called.</li>
+ <li>Otherwise, the usual <code>toString()</code> conversions will be applied.</li>
+ </ul>
+ <p>When a format string is provided, numeric values are formatted using the
+ <code>java.text.DecimalFormat</code> class; if the format string came from
+ a resource, the <code>applyLocalisedPattern()</code> method is used, and
+ <code>applyPattern()</code> is used otherwise. Dates are formatted using
+ the <code>SimpleDateFormat</code> class. For details of the specific format
+ patterns, please see the Javadocs for those classes.</p>
+ <p>If a problem occurs while retrieving the specified bean property, a
+ request time exception will be thrown.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>bundle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the application scope bean under which the
+ <code>MessageResources</code> object containing our messages
+ is stored.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>filter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>If this attribute is set to <code>true</code>, the rendered property
+ value will be filtered for characters that are sensitive in HTML, and any
+ such characters will be replaced by their entity equivalents.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>format</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the format string to use to convert bean or property value
+ to the <code>String</code>. If nothing specified, then default format
+ string for value data type will be searched in message resources by
+ according key.</p>
+<!-- move to developers guide
+ <table>
+ <tr>
+ <td>Key to search format string</td>
+ <td>Data types</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.int</td>
+ <td>java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long,
+ java.math.BigInteger</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.float</td>
+ <td>java.lang.Float, java.lang.Double, java.math.BigDecimal</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.sql.timestamp</td>
+ <td>java.sql.Timestamp</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.sql.date</td>
+ <td>java.sql.Date</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.sql.time</td>
+ <td>java.sql.Time</td>
+ </tr>
+ <tr>
+ <td>org.apache.struts.taglib.bean.format.date</td>
+ <td>java.util.Date</td>
+ </tr>
+ </table>
+ <p>Default format strings in resources can be written as - <br />
+ <pre>
+ org.apache.struts.taglib.bean.format.int=######
+ org.apache.struts.taglib.bean.format.float=######,####
+ org.apache.struts.taglib.bean.format.sql.timestamp=hh 'o''clock' a, zzzz
+ org.apache.struts.taglib.bean.format.sql.date=EEE, MMM d, ''yy
+ org.apache.struts.taglib.bean.format.sql.time=h:mm a
+ org.apache.struts.taglib.bean.format.date=hh 'o''clock' a, zzzz
+ </pre>
+ <br />values for resource file entries are standart Java format strings for
+ date, time and number values.</p>
+-->
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>formatKey</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the key to search format string in application resources.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>ignore</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>If this attribute is set to <code>true</code>, and the bean specified
+ by the <code>name</code> and <code>scope</code> attributes does not
+ exist, simply return without writing anything. If this attribute is
+ set to <code>false</code>, a runtime exception to be thrown,
+ consistent with the other tags in this tag library.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>locale</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the session scope bean under which our currently
+ selected <code>Locale</code> object is stored.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the attribute name of the bean whose property is accessed
+ to retrieve the value specified by <code>property</code> (if
+ specified). If <code>property</code> is not specified, the value of
+ this bean itself will be rendered.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the name of the property to be accessed on the bean
+ specified by <code>name</code>. This value may be a simple, indexed,
+ or nested property reference expression. If not specified, the bean
+ identified by <code>name</code> will itself be rendered. If the
+ specified property returns null, no output will be rendered.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Specifies the variable scope searched to retrieve the bean specified
+ by <code>name</code>. If not specified, the default rules applied by
+ <code>PageContext.findAttribute()</code> are applied.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+</taglib>
+
+
+
diff --git a/src/main/webapp/WEB-INF/tlds/struts-logic.tld b/src/main/webapp/WEB-INF/tlds/struts-logic.tld new file mode 100644 index 0000000..fe638ae --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/struts-logic.tld @@ -0,0 +1,1893 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ $Id: struts-logic.tld 481833 2006-12-03 17:32:52Z niallp $
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE taglib
+ PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+ <tlib-version>1.3</tlib-version>
+ <jsp-version>1.2</jsp-version>
+ <short-name>logic</short-name>
+ <uri>http://struts.apache.org/tags-logic</uri>
+ <description>
+ <![CDATA[
+ <p><strong>Note: Some of the features in this taglib are also
+ available in the <a href="http://java.sun.com/products/jsp/jstl/">JavaServer Pages Standard Tag Library (JSTL)</a>.
+ The Struts team encourages the use of the standard tags over the Struts
+ specific tags when possible.</strong></p>
+
+ <p>This tag library contains tags that are useful in managing conditional
+ generation of output text, looping over object collections for
+ repetitive generation of output text, and application flow management.</p>
+
+ <p>For tags that do value comparisons (<code>equal</code>,
+ <code>greaterEqual</code>, <code>greaterThan</code>, <code>lessEqual</code>,
+ <code>lessThan</code>, <code>notEqual</code>), the following rules apply:</p>
+ <ul>
+ <li>The specified value is examined. If it can be converted successfully
+ to a <code>double</code> or a <code>long</code>, it is assumed that the
+ ultimate comparison will be numeric (either floating point or integer).
+ Otherwise, a String comparison will be performed.</li>
+ <li>The variable to be compared to is retrieved, based on the selector
+ attribute(s) (<code>cookie</code>, <code>header</code>,
+ <code>name</code>, <code>parameter</code>, <code>property</code>)
+ present on this tag. It will be converted to the appropriate type
+ for the comparison, as determined above.</li>
+ <li>If the specified variable or property returns null, it will be
+ coerced to a zero-length string before the comparison occurs.</li>
+ <li>The specific comparison for this tag will be performed, and the nested
+ body content of this tag will be evaluated if the comparison returns
+ a <code>true</code> result.</li>
+ </ul>
+
+ <p>For tags that do substring matching (<code>match</code>,
+ <code>notMatch</code>), the following rules apply:</p>
+ <ul>
+ <li>The specified variable is retrieved, based on the selector attribute(s)
+ (<code>cookie</code>, <code>header</code>, <code>name</code>,
+ <code>parameter</code>, <code>property</code>) present on this tag.
+ The variable is converted to a String, if necessary.</li>
+ <li>A request time exception will be thrown if the specified variable
+ cannot be retrieved, or has a null value.</li>
+ <li>The specified value is checked for existence as a substring of the
+ variable, in the position specified by the <code>location</code>
+ attribute, as follows: at the beginning (if location is set to
+ <code>start</code>), at the end (if location is set to
+ <code>end</code>), or anywhere (if location is not specified).</li>
+ </ul>
+
+ <p>Many of the tags in this tag library will throw a
+ <code>JspException</code> at runtime when they are utilized incorrectly
+ (such as when you specify an invalid combination of tag attributes). JSP
+ allows you to declare an "error page" in the <code><%@ page %></code>
+ directive. If you wish to process the actual exception that caused the
+ problem, it is passed to the error page as a request attribute under key
+ <code>org.apache.struts.action.EXCEPTION</code>.</p>
+
+ ]]>
+ </description>
+ <tag>
+ <name>empty</name>
+ <tag-class>org.apache.struts.taglib.logic.EmptyTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested variable is
+ either null or an empty string.
+ </strong></p>
+
+ <p>This tag evaluates its nested body content only if the specified value
+ is either absent (i.e. <code>null</code>), an empty string (i.e. a
+ <code>java.lang.String</code> with a length of zero), or an empty
+ <code>java.util.Collection</code> or <code>java.util.Map</code> (tested by
+ the .isEmpty() method on the respective interface).</p>
+
+ <p>
+ <strong>JSTL</strong>: The equivalent JSTL tag is <c:if> using the
+ <code>empty</code> operator. For example,
+ <br/>
+ <code>
+ <c:if test="${empty sessionScope.myBean.myProperty}">
+ do something
+ </c:if>
+ </code>
+ </p>
+
+ <dl><dt><b>Since:</b></dt>
+ <dd>Struts 1.1</dd></dl>
+ ]]>
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>equal</name>
+ <tag-class>org.apache.struts.taglib.logic.EqualTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is equal to the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable and value are <strong>equal</strong>.
+ </p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>forward</name>
+ <tag-class>org.apache.struts.taglib.logic.ForwardTag</tag-class>
+ <body-content>empty</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Forward control to the page specified by the specified ActionForward
+ entry.
+ </strong></p>
+
+ <p>Performs a <code>PageContext.forward()</code> or
+ <code>HttpServletResponse.sendRedirect()</code> call for the global
+ <code>ActionForward</code> entry for the specified name. URL
+ rewriting will occur automatically if a redirect is performed.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>
+ The logical name of the global <code>ActionForward</code> entry
+ that identifies the destination, and forwarding approach, to be used.
+ <strong>Note</strong>: forwarding to Tiles definitions is not supported
+ from this tag. You should forward to them from an Action subclass.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>greaterEqual</name>
+ <tag-class>org.apache.struts.taglib.logic.GreaterEqualTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is greater than or equal to the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable is <strong>greater than or equal</strong>
+ to the value.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>greaterThan</name>
+ <tag-class>org.apache.struts.taglib.logic.GreaterThanTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is greater than the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable is <strong>greater than</strong>
+ the value.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>iterate</name>
+ <tag-class>org.apache.struts.taglib.logic.IterateTag</tag-class>
+ <tei-class>org.apache.struts.taglib.logic.IterateTei</tei-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Repeat the nested body content of this tag over a specified collection.
+ </strong></p>
+
+ <p>Repeats the nested body content of this tag once for every element
+ of the specified collection, which must be an <code>Iterator</code>,
+ a <code>Collection</code>, a <code>Map</code> (whose values are to be
+ iterated over), or an array. The collection to be iterated over must be
+ specified in one of the following ways:</p>
+ <ul>
+ <li>As a runtime expression specified as the value of the
+ <code>collection</code> attribute.</li>
+ <li>As a JSP bean specified by the <code>name</code> attribute.</li>
+ <li>As the property, specified by the <code>property</code>, of the
+ JSP bean specified by the <code>name</code> attribute.</li>
+ </ul>
+
+ <p>The collection to be iterated over MUST conform to one of the following
+ requirements in order for iteration to be successful:</p>
+ <ul>
+ <li>An array of Java objects or primitives.</li>
+
+ <li>An implementation of <code>java.util.Collection</code>, including
+ <code>ArrayList</code> and <code>Vector</code>.</li>
+ <li>An implementation of <code>java.util.Enumeration</code>.</li>
+ <li>An implementation of <code>java.util.Iterator</code>.</li>
+ <li>An implementation of <code>java.util.Map</code>, including
+ <code>HashMap</code>, <code>Hashtable</code>, and
+ <code>TreeMap</code>. <strong>NOTE</strong> - See below for
+ additional information about accessing Maps.</li>
+ </ul>
+
+ <p>Normally, each object exposed by the iterate tag is an element
+ of the underlying collection you are iterating over. However, if you
+ iterate over a <code>Map</code>, the exposed object is of type
+ <code>Map.Entry</code> that has two properties:</p>
+ <ul>
+ <li><code>key</code> - The key under which this item is stored in the
+ underlying Map.</li>
+ <li><code>value</code> - The value that corresponds to this key.</li>
+ </ul>
+
+ <p>So, if you wish to iterate over the values of a Hashtable, you would
+ implement code like the following:</p>
+ <code>
+ <logic:iterate id="element" name="myhashtable"><br/>
+ Next element is <bean:write name="element" property="value"/><br/>
+ </logic:iterate>
+ </code>
+
+ <p>If the collection you are iterating over can contain <code>null</code>
+ values, the loop will still be performed but no page scope attribute
+ (named by the <code>id</code> attribute) will be created for that loop
+ iteration. You can use the <code><logic:present></code> and
+ <code><logic:notPresent></code> tags to test for this case.</p>
+
+ ]]>
+ </description>
+ <attribute>
+ <name>collection</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.Object</type>
+ <description>
+ <![CDATA[
+ <p>A runtime expression that evaluates to a collection (conforming to
+ the requirements listed above) to be iterated over.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>id</name>
+ <required>true</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a page scope JSP bean that will contain the current
+ element of the collection on each iteration, if it is not
+ <code>null</code>.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>indexId</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a page scope JSP bean that will contain the current
+ index of the collection on each iteration.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>length</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The maximum number of entries (from the underlying collection) to be
+ iterated through on this page. This can be either an integer that
+ directly expresses the desired value, or the name of a JSP bean (in
+ any scope) of type <code>java.lang.Integer</code> that defines the
+ desired value. If not present, there will be no limit on the number
+ of iterations performed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the JSP bean containing the collection to be iterated
+ (if <code>property</code> is not specified), or the JSP bean whose
+ property getter returns the collection to be iterated (if
+ <code>property</code> is specified).</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>offset</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The zero-relative index of the starting point at which entries from
+ the underlying collection will be iterated through. This can be either
+ an integer that directly expresses the desired value, or the name of a
+ JSP bean (in any scope) of type <code>java.lang.Integer</code> that
+ defines the desired value. If not present, zero is assumed (meaning
+ that the collection will be iterated from the beginning.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Name of the property, of the JSP bean specified by <code>name</code>,
+ whose getter returns the collection to be iterated.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>type</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Fully qualified Java class name of the element to be exposed through
+ the JSP bean named from the <code>id</code> attribute. If not present,
+ no type conversions will be performed. NOTE: The actual elements of
+ the collection must be assignment-compatible with this class, or a
+ request time ClassCastException will occur.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>lessEqual</name>
+ <tag-class>org.apache.struts.taglib.logic.LessEqualTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is less than or equal to the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable is <strong>less than or equal</strong>
+ to the value.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>lessThan</name>
+ <tag-class>org.apache.struts.taglib.logic.LessThanTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is less than the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable is <strong>less than</strong>
+ the value.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>match</name>
+ <tag-class>org.apache.struts.taglib.logic.MatchTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the specified value
+ is an appropriate substring of the requested variable.
+ </strong></p>
+
+ <p>Matches the variable specified by one of the selector attributes
+ (as a String) against the specified constant value. If the value is
+ a substring (appropriately limited by the <code>location</code>
+ attribute), the nested body content of this tag is evaluated.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>location</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If not specified, a match between the variable and the value may
+ occur at any position within the variable string. If specified, the
+ match must occur at the specified location (either <code>start</code>
+ or <code>end</code>) of the variable string.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value which is checked for existence as a substring
+ of the specified variable.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>messagesNotPresent</name>
+ <tag-class>
+ org.apache.struts.taglib.logic.MessagesNotPresentTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Generate the nested body content of this tag if the specified
+ message is not present in any scope.
+ </strong></p>
+
+ <p>Evaluates the nested body content of this tag if
+ an <code>ActionMessages</code>
+ object, <code>ActionErrors</code> object, a String,
+ or a String array is not present in any scope. If
+ such a bean is found, nothing will be rendered.
+ </p>
+
+ <dl><dt><b>Since:</b></dt>
+ <dd>Struts 1.1</dd></dl>
+ ]]>
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The parameter key used to retrieve the message from page, request,
+ session or application scope.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Name of the property for which messages should be
+ retrieved. If not specified, all messages (regardless
+ of property) are retrieved.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>By default the tag will retrieve the bean it will
+ iterate over from the <code>Globals.ERROR_KEY</code> constant string,
+ but if this attribute is set to 'true' the bean
+ will be retrieved from the <code>Globals.MESSAGE_KEY</code>
+ constant string. Also if this is set to 'true', any value
+ assigned to the name attribute will be ignored.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>messagesPresent</name>
+ <tag-class>
+ org.apache.struts.taglib.logic.MessagesPresentTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Generate the nested body content of this tag if the specified
+ message is present in any scope.
+ </strong></p>
+
+ <p>Evaluates the nested body content of this tag if
+ an <code>ActionMessages</code>
+ object, <code>ActionErrors</code> object, a String,
+ or a String array is present in any scope. If
+ such a bean is not found, nothing will be rendered.
+ </p>
+
+ <dl><dt><b>Since:</b></dt>
+ <dd>Struts 1.1</dd></dl>
+ ]]>
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The parameter key used to retrieve the message from page, request,
+ session, or application scope.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Name of the property for which messages should be
+ retrieved. If not specified, all messages (regardless
+ of property) are retrieved.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>By default the tag will retrieve the bean it will
+ iterate over from the <code>Globals.ERROR_KEY</code> constant string,
+ but if this attribute is set to 'true' the bean
+ will be retrieved from the <code>Globals.MESSAGE_KEY</code>
+ constant string. Also if this is set to 'true', any value
+ assigned to the name attribute will be ignored.
+ </p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>notEmpty</name>
+ <tag-class>org.apache.struts.taglib.logic.NotEmptyTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested variable is
+ neither null, nor an empty string, nor an empty java.util.Collection
+ (tested by the .isEmpty() method on the java.util.Collection interface).
+ </strong></p>
+
+ <p>This tag evaluates its nested body content only if the specified value
+ is present (i.e. not <code>null</code>) and is not an empty string (i.e. a
+ <code>java.lang.String</code> with a length of zero).</p>
+
+ <p>
+ <strong>JSTL</strong>: The equivalent JSTL tag is <c:if> using the
+ <code>! empty</code> operator. For example,
+ <br/>
+ <code>
+ <c:if test="${ ! empty sessionScope.myBean.myProperty}">
+ do something
+ </c:if>
+ </code>
+ </p>
+ ]]>
+ </description>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>notEqual</name>
+ <tag-class>org.apache.struts.taglib.logic.NotEqualTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the requested
+ variable is not equal to the specified value.
+ </strong></p>
+
+ <p>Compares the variable specified by one of the selector attributes
+ against the specified constant value. The nested body content of this
+ tag is evaluated if the variable and value are <strong>not equal</strong>.
+ </p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be compared is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value to which the variable, specified by other
+ attribute(s) of this tag, will be compared.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>notMatch</name>
+ <tag-class>org.apache.struts.taglib.logic.NotMatchTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Evaluate the nested body content of this tag if the specified value
+ is not an appropriate substring of the requested variable.
+ </strong></p>
+
+ <p>Matches the variable specified by one of the selector attributes
+ (as a String) against the specified constant value. If the value is
+ not a substring (appropriately limited by the <code>location</code>
+ attribute), the nested body content of this tag is evaluated.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the value of the cookie whose
+ name is specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the value of the header whose
+ name is specified by this attribute. The name match is performed
+ in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>location</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>If not specified, a match between the variable and the value may
+ occur at any position within the variable string. If specified, the
+ match must occur at the specified location (either <code>start</code>
+ or <code>end</code>) of the variable string.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the JSP bean specified by this
+ attribute, if <code>property</code> is not specified, or the value
+ of the specified property of this bean, if <code>property</code>
+ is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the first, or only, value of the
+ request parameter specified by this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The variable to be matched is the property (of the bean specified
+ by the <code>name</code> attribute) specified by this attribute.
+ The property reference can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The constant value which is checked for existence as a substring
+ of the specified variable.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>notPresent</name>
+ <tag-class>org.apache.struts.taglib.logic.NotPresentTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Generate the nested body content of this tag if the specified
+ value is not present in this request.
+ </strong></p>
+
+ <p>Depending on which attribute is specified, this tag checks the
+ current request, and evaluates the nested body content of this tag
+ only if the specified value <strong>is not</strong> present. Only one
+ of the attributes may be used in one occurrence of this tag, unless
+ you use the <code>property</code> attribute, in which case the
+ <code>name</code> attribute is also required.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a cookie with the specified name.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of an HTTP header with the specified
+ name. The name match is performed in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a JSP bean, in any scope, with the
+ specified name. If <code>property</code> is also specified, checks
+ for a non-null property value for the specified property.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of at least one occurrence of the
+ specified request parameter on this request, even if the parameter
+ value is a zero-length string.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a non-null property value, returned
+ by a property getter method on the JSP bean (in any scope) that is
+ specified by the <code>name</code> attribute. Property references
+ can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>role</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks whether the currently authenticated user (if any) has been
+ associated with the specified security role.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks whether the currently authenticated user principal has the
+ specified name.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>present</name>
+ <tag-class>org.apache.struts.taglib.logic.PresentTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>
+ <![CDATA[
+ <p><strong>
+ Generate the nested body content of this tag if the specified
+ value is present in this request.
+ </strong></p>
+
+ <p>Depending on which attribute is specified, this tag checks the
+ current request, and evaluates the nested body content of this tag
+ only if the specified value <strong>is</strong> present. Only one
+ of the attributes may be used in one occurrence of this tag, unless
+ you use the <code>property</code> attribute, in which case the
+ <code>name</code> attribute is also required.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>cookie</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a cookie with the specified name.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>header</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of an HTTP header with the specified
+ name. The name match is performed in a case insensitive manner.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a JSP bean, in any scope, with the
+ specified name. If <code>property</code> is also specified, checks
+ for a non-null property value for the specified property.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>parameter</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of at least one occurrence of the
+ specified request parameter on this request, even if the parameter
+ value is a zero-length string.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks for the existence of a non-null property value, returned
+ by a property getter method on the JSP bean (in any scope) that is
+ specified by the <code>name</code> attribute. Property references
+ can be simple, nested, and/or indexed.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>role</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks whether the currently authenticated user (if any) has been
+ associated with any of the specified security roles. Use a comma-delimited
+ list to check for multiple roles. Example:
+ <code><logic:present role="role1,role2,role3">
+ code.....
+ </logic:present></code></p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The bean scope within which to search for the bean named by the
+ <code>name</code> property, or "any scope" if not specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>user</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Checks whether the currently authenticated user principal has the
+ specified name.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+ <tag>
+ <name>redirect</name>
+ <tag-class>org.apache.struts.taglib.logic.RedirectTag</tag-class>
+ <description>
+ <![CDATA[
+ <p><strong>Render an HTTP Redirect</strong></p>
+
+
+ <p>Performs an <code>HttpServletResponse.sendRedirect()</code>
+ call to the hyperlink specified by the attributes to this
+ tag. URL rewriting will be applied automatically, to
+ maintain session state in the absence of cookies.</p>
+
+ <p>The base URL for this redirect is calculated based on
+ which of the following attributes you specify (you must
+ specify exactly one of them):</p>
+ <ul>
+ <li><em>forward</em> - Use the value of this attribute as the
+ name of a global <code>ActionForward</code> to be looked
+ up, and use the module-relative or context-relative
+ URI found there.</li>
+ <li><em>href</em> - Use the value of this attribute unchanged.
+ </li>
+ <li><em>page</em> - Use the value of this attribute as an
+ module-relative URI, and generate a server-relative
+ URI by including the context path.</li>
+ </ul>
+
+ <p>Normally, the redirect you specify with one of the
+ attributes described in the previous paragraph will be left
+ unchanged (other than URL rewriting if necessary). However,
+ there are two ways you can append one or more dynamically
+ defined query parameters to the hyperlink -- specify a single
+ parameter with the <code>paramId</code> attribute (and its
+ associated attributes to select the value), or specify the
+ <code>name</code> (and optional <code>property</code>)
+ attributes to select a <code>java.util.Map</code> bean that
+ contains one or more parameter ids and corresponding values.
+ </p>
+
+ <p>To specify a single parameter, use the <code>paramId</code>
+ attribute to define the name of the request parameter to be
+ submitted. To specify the corresponding value, use one of the
+ following approaches:</p>
+ <ul>
+ <li><em>Specify only the <code>paramName</code> attribute</em>
+ - The named JSP bean (optionally scoped by the value of the
+ <code>paramScope</code> attribute) must identify a value
+ that can be converted to a String.</li>
+ <li><em>Specify both the <code>paramName</code> and
+ <code>paramProperty</code> attributes</em> - The specified
+ property getter method will be called on the JSP bean
+ identified by the <code>paramName</code> (and optional
+ <code>paramScope</code>) attributes, in order to select
+ a value that can be converted to a String.</li>
+ </ul>
+
+ <p>If you prefer to specify a <code>java.util.Map</code> that
+ contains all of the request parameters to be added to the
+ hyperlink, use one of the following techniques:</p>
+ <ul>
+ <li><em>Specify only the <code>name</code> attribute</em> -
+ The named JSP bean (optionally scoped by the value of
+ the <code>scope</code> attribute) must identify a
+ <code>java.util.Map</code> containing the parameters.</li>
+ <li><em>Specify both <code>name</code> and
+ <code>property</code> attributes</em> - The specified
+ property getter method will be called on the bean
+ identified by the <code>name</code> (and optional
+ <code>scope</code>) attributes, in order to return the
+ <code>java.util.Map</code> containing the parameters.</li>
+ </ul>
+
+ <p>As the <code>Map</code> is processed, the keys are assumed
+ to be the names of query parameters to be appended to the
+ hyperlink. The value associated with each key must be either
+ a String or a String array representing the parameter value(s).
+ If a String array is specified, more than one value for the
+ same query parameter name will be created.</p>
+ ]]>
+ </description>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Logical name of a global <code>Action</code> that
+ contains the actual content-relative URI of the destination
+ of this transfer. This hyperlink may be dynamically
+ modified by the inclusion of query parameters, as described
+ in the tag description. You <strong>must</strong> specify
+ exactly one of the <code>action</code> attribute, the
+ <code>forward</code> attribute, the
+ <code>href</code> attribute,
+ or the <code>page</code> attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>anchor</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Optional anchor tag ("#xxx") to be added to the generated
+ hyperlink. Specify this value <strong>without</strong> any
+ "#" character.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>forward</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>Logical name of a global <code>ActionForward</code> that
+ contains the actual content-relative URI of the destination
+ of this redirect. This URI may be dynamically
+ modified by the inclusion of query parameters, as described
+ in the tag description. You <strong>must</strong> specify
+ exactly one of the <code>forward</code> attribute, the
+ <code>href</code> attribute, the <code>linkName</code>
+ attribute, or the <code>page</code> attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>href</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The URL to which this redirect will transfer control.
+ This URL may be dynamically modified
+ by the inclusion of query parameters, as described in the
+ tag description. You <strong>must</strong> specify
+ exactly one of the <code>forward</code> attribute, the
+ <code>href</code> attribute, the <code>linkName</code>
+ attribute, or the <code>page</code> attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a JSP bean that contains a <code>Map</code>
+ representing the query parameters (if <code>property</code>
+ is not specified), or a JSP bean whose property getter is
+ called to return a <code>Map</code> (if <code>property</code>
+ is specified).</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>page</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The context-relative path (beginning with a "/"
+ character) to which this hyperlink will transfer control
+ if activated. This hyperlink may be dynamically modified
+ by the inclusion of query parameters, as described in the
+ tag description. You <strong>must</strong> specify exactly
+ one of the <code>forward</code> attribute, the
+ <code>href</code> attribute, the <code>linkName</code>
+ attribute, or the <code>page</code> attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>paramId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of the request parameter that will be dynamically
+ added to the generated hyperlink. The corresponding value is
+ defined by the <code>paramName</code> and (optional)
+ <code>paramProperty</code> attributes, optionally scoped by
+ the <code>paramScope</code> attribute</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>paramName</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a JSP bean that is a String containing the
+ value for the request parameter named by <code>paramId</code>
+ (if <code>paramProperty</code> is not specified), or a JSP
+ bean whose property getter is called to return a String
+ (if <code>paramProperty</code> is specified). The JSP bean
+ is constrained to the bean scope specified by the
+ <code>paramScope</code> property, if it is specified.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>paramProperty</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a property of the bean specified by the
+ <code>paramName</code> attribute, whose return value must
+ be a String containing the value of the request parameter
+ (named by the <code>paramId</code> attribute) that will be
+ dynamically added to this hyperlink.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>paramScope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The scope within which to search for the bean specified
+ by the <code>paramName</code> attribute. If not specified,
+ all scopes are searched.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>property</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The name of a property of the bean specified by the
+ <code>name</code> attribute, whose return value must be
+ a <code>java.util.Map</code> containing the query parameters
+ to be added to the hyperlink. You <strong>must</strong>
+ specify the <code>name</code> attribute if you specify
+ this attribute.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <description>
+ <![CDATA[
+ <p>The scope within which to search for the bean specified
+ by the <code>name</code> attribute. If not specified, all
+ scopes are searched.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>transaction</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>Set to <code>true</code> if you want the current
+ transaction control token included in the generated
+ URL for this redirect.</p>
+ ]]>
+ </description>
+ </attribute>
+ <attribute>
+ <name>useLocalEncoding</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ <description>
+ <![CDATA[
+ <p>If set to <code>true</code>, LocalCharacterEncoding will be
+ used, that is, the characterEncoding set to the HttpServletResponse,
+ as prefered character encoding rather than UTF-8, when
+ URLEncoding is done on parameters of the URL.</p>
+ ]]>
+ </description>
+ </attribute>
+ </tag>
+</taglib>
+
+
+
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..c938b16 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE web-app
+ PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+
+ <servlet>
+ <servlet-name>WAYF</servlet-name>
+ <display-name>Shibboleth WAYF Service</display-name>
+ <servlet-class>edu.internet2.middleware.shibboleth.wayf.WayfService</servlet-class>
+ <init-param>
+ <param-name>WAYFConfigFileLocation</param-name>
+ <param-value>$DS_HOME$/conf/wayfconfig.xml</param-value>
+ </init-param>
+ <init-param>
+ <param-name>WAYFLogConfig</param-name>
+ <param-value>$DS_HOME$/conf/logging.xml</param-value>
+ </init-param> + <init-param> + <param-name>WAYFLogConfigPollFrequency</param-name> + <param-value>300000</param-value> + </init-param>
+ </servlet>
+
+<!-- We specify two mappings - old style http:/host/shibboleth-wayf/WAYF/ and the new style
+ whereby the precise name influences the behavior. See the configuration file for
+ examples -->
+
+ <servlet-mapping>
+ <servlet-name>WAYF</servlet-name>
+ <url-pattern>/WAYF</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>WAYF</servlet-name>
+ <url-pattern>*.wayf</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>WAYF</servlet-name>
+ <url-pattern>/DS</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>WAYF</servlet-name>
+ <url-pattern>*.ds</url-pattern>
+ </servlet-mapping>
+
+ <mime-mapping>
+ <extension>css</extension>
+ <mime-type>text/css</mime-type>
+ </mime-mapping>
+</web-app>
diff --git a/src/main/webapp/images/incommon.gif b/src/main/webapp/images/incommon.gif Binary files differnew file mode 100644 index 0000000..01949cf --- /dev/null +++ b/src/main/webapp/images/incommon.gif diff --git a/src/main/webapp/images/internet2.gif b/src/main/webapp/images/internet2.gif Binary files differnew file mode 100644 index 0000000..74ecbcb --- /dev/null +++ b/src/main/webapp/images/internet2.gif diff --git a/src/main/webapp/images/logo.jpg b/src/main/webapp/images/logo.jpg Binary files differnew file mode 100644 index 0000000..c021e7f --- /dev/null +++ b/src/main/webapp/images/logo.jpg diff --git a/src/main/webapp/index.htm b/src/main/webapp/index.htm new file mode 100644 index 0000000..8825d6d --- /dev/null +++ b/src/main/webapp/index.htm @@ -0,0 +1,5 @@ +<html>
+<head>
+<meta HTTP-EQUIV="REFRESH" content="0; url=wayferror.jsp">
+</head>
+</html>
diff --git a/src/main/webapp/wayf.css b/src/main/webapp/wayf.css new file mode 100644 index 0000000..4056aa3 --- /dev/null +++ b/src/main/webapp/wayf.css @@ -0,0 +1,104 @@ +body { + background-color: #CCCCCC; + text-align: center; + color: #000000; + text-align: left; +} + +p { + font-size: 90%; +} + +li { + font-size: 100%; + list-style-type: none; +} + +h1 { + font-size: 135%; + font-weight: bold; + color: #FFFFFF; +} + +h2 { + font-size: 100%; + font-weight: bold; +} + +h3 { + font-size: 100%; + font-weight: normal; +} + +span.option { + font-size: 100%; + font-weight: bold; +} + +.error { + font-size: 100%; + color: #990000; +} + +.head { + max-width: 600px; + border-left-width: 2px; + border-right-width: 2px; + border-top-width: 2px; + border-bottom-width: 2px; + border-color: #000000; + border-style: solid; + background-color: #6688aa; + margin-top: 1em; + margin-bottom: 0; + margin-left: 1em; + margin-right: 1em; + padding-left: .75em; + padding-right: .75em; + padding-top: .5em; + padding-bottom: .5em; +} + +.selector { + max-width: 600px; + border-left-width: 2px; + border-right-width: 2px; + border-top-width: 0; + border-bottom-width: 0; + border-color: #000000; + border-style: solid; + background-color: #FFFFFF; + margin-top: 0; + margin-bottom: 0; + margin-left: 1em; + margin-right: 1em; + padding: .75em; +} + +.footer { + max-width: 600px; + border-left-width: 2px; + border-right-width: 2px; + border-top-width: 2px; + border-bottom-width: 2px; + border-color: #000000; + border-style: solid; + background-color: #FFFFFF; + margin-top: 0; + margin-bottom: 1em; + margin-left: 1em; + margin-right: 1em; + padding-left: .75em; + padding-right: .75em; + padding-top: .5em; + padding-bottom: .5em; +} + +span.warning { + font-size: 80%; +} + +.logo { + text-align: center; + margin-top: 1.5em; +} diff --git a/src/main/webapp/wayf.jsp b/src/main/webapp/wayf.jsp new file mode 100644 index 0000000..74ba11d --- /dev/null +++ b/src/main/webapp/wayf.jsp @@ -0,0 +1,547 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<%@ page contentType="text/html;charset=UTF-8" %> +<html> + +<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> +<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> + +<%request.setCharacterEncoding("UTF-8");%> +<%response.setCharacterEncoding("UTF-8");%> + +<logic:present name="showComments" scope="Request"> + +<!-- TO CONFIGURE THIS FOR A SPECIFIC SITE + ===================================== + + Before you deploy this jsp you need to look for CONFIG below. + These mark places where you should make changes. + + If you want to make more profound changes but only to the jsp, + you should read the sections marked PROGRAMMING NOTE below.--> + +<!-- PROGRAMMING NOTE + + "requestURL" contains the URL that was specified to get the + WAYF going. The jsp uses it mostly for submitting result back to + the WAYF and error reporting --> + +</logic:present> + + <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/> + +<logic:present name="showComments" scope="Request"> + +<!-- PROGRAMMING NOTE + + shire, target, provider and time are all part of the Shibboleth + 1.3 discovery protocol and need to be specified as parameters to the WAYF + + entityID, return, returnIDParam are all part of the + SAML Discovery protocol. + + +--> +</logic:present> + +<logic:notPresent name="entityID" scope="request"> +<logic:notPresent name="shire" scope="request"> + +<jsp:forward page = "wayferror.jsp"/> +</logic:notPresent> +</logic:notPresent> + + +<logic:present name="showComments" scope="Request"> + +<!-- PROGRAMMING NOTE + In addition to the above. The WAYF may also supply the following to + the jsp. + + "cookieList" If this exists it represents the contents of the + _saml_idp cookie (possibly filtered to remove IdPs which + cannot serve the SP). It is a Collection of IdPSite objects, + which themselves have the following properties: + + "name" The uri for the IdP, which needs to be returned to the + WAYF in the "origin" parameter. + + "displayName" User friendly name (taken from its alias) + + "addressFor" The (ungarnished) URL for the IdP. This could be + used to create a direct hyperlink to the IdP + + "sites" If this exists it contains all the possible IdPs for for + the SP (possibly filtered). It is a Collection of IdPSite + Objects which are described above. This is only present if + provideList was defined true in the configuration. + + "siteLists" If this exists it contains all the possible metadata + files which can service for the SP (possibly filtered). It + is a collection of IdPSiteSetEntry Objects which have two + properties: + + "name" This is the displayName from the Metadata element in + the WAYF configuration file + + "sites" This represents the IdPs. Again it is a collection + of IdPSite Objects + + It is only present if provideListOfList was defined true in + the configuration. + + "singleSiteList" if this is present, then there is only one + IdPSiteSetEntry Object in "siteLists". + + "searchresultempty" If this is present then it means that a + search was performed, but no suitable IdPs were returned. + + "searchresults" If this is present it represents the list of IdPs + which matched a previous search. It is a Collection of + IdPSite Objects. --> + +<!-- PROGRAMMING NOTE + + The jsp communicates back to the WAYF via the parameters listed + above, and: + + "action" what the WAYF has to do. Possible contents are: + + "lookup" - refresh the screen. + "search" - perform a search on the contents parameter "string" + "selection" - redirect to the IdP with the uri "origin" + + "cache" preserve any selection in the _saml_idp cookie. A + value of "session" makes the cookie last for the browser + session, "perm" gives it the lifetime specified in the + configuration file. + + The tabindex is hard wired. Fortunately the standard allows us to + have duplicate numbers and says the order is the order things + get emitted. We use these numbers + + 10 - Recently used sites hyperlinks + 20 - <clear button for above> + 30 Federation selection + 40 IdP within Selection + 50 Select button + 60 How long to remember selector + 70 Search entry + 80 Search Button + 90 List of search results + 100 Select search result + 110 How long to remember search results + 120 Hyperlink to admin user. + +--> + +</logic:present> + +<head> + <link rel="stylesheet" title="normal" type="text/css" + href="wayf.css" /> <title>Identity Provider Selection</title> + </head> + +<body> + <div class="head"> + <h1> + +Select an identity provider + + </h1> + </div> + + <div class="selector"> + <p class="text"> + +<!--CONFIG--> + +The Service you are trying to reach requires that you +authenticate with your home institution, please select it from the +list below. + + </p> + <logic:present name="cookieList" scope="request"> + + <h2> + +Recently used institutions: + + </h2> + +<logic:present name="showComments" scope="Request"> + +<!-- PROGRAMMING NOTE + + Generate a hyperlink back to the WAYF. Note that we are + simulating the user having specified a permanent cookie --> + +</logic:present> + <logic:iterate id="site" name="cookieList"> + <p class="text"> + <logic:present name="entityID" scope="request"> + + <bean:define id="returnIDParam" name="returnIDParam"/> + <bean:define id="ei" name="entityID" /> + <bean:define id="re" name="returnX"/> + + <a tabindex="10" href="<bean:write name="requestURL" />?entityID=<%= java.net.URLEncoder.encode(ei.toString(), "utf-8") %>&return=<%= java.net.URLEncoder.encode(re.toString(), "utf-8") %>&returnIDxParam=<%= java.net.URLEncoder.encode( returnIDParam.toString(), "utf-8" ) %>&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />"> + <jsp:getProperty name="site" property="displayName" /> + </a> + </logic:present> + <logic:notPresent name="entityID" scope="request"> + <bean:define id="targ" name="target" /> + <bean:define id="shire" name="shire" /> + <bean:define id="pid" name="providerId" /> + <a tabindex="10" href="<bean:write name="requestURL" />?target=<%= java.net.URLEncoder.encode(targ.toString(),"utf-8") %>&shire=<%= java.net.URLEncoder.encode(shire.toString(),"utf-8") %>&providerId=<%= java.net.URLEncoder.encode(pid.toString(),"utf-8") %>&time=<bean:write name="time" />&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />"> + <jsp:getProperty name="site" + property="displayName" /> + </a> + </logic:notPresent> + </p> + </logic:iterate> + +<logic:present name="showComments" scope="Request"> + +<!-- PROGRAMMING NOTE + + We defined the ClearCache.Wayf service in wayfconfig. So we know + it is here. This will empty the cookie and loop --> + +</logic:present> + + <form method="get" action="ClearCache.wayf" > + <div> + <logic:notPresent name="entityID" scope="request"> + <input type="hidden" name="shire" value="<bean:write name="shire" />" /> + <input type="hidden" name="target" value="<bean:write name="target" />" /> + <input type="hidden" name="providerId" value="<bean:write name="providerId" />" /> + <logic:present name="time" scope="request"> + <input type="hidden" name="time" value="<bean:write name="time" />" /> + </logic:present> + </logic:notPresent> + <logic:present name="entityID" scope="request"> + <input type="hidden" name="entityID" value="<bean:write name="entityID" />" /> + <input type="hidden" name="returnX" value="<bean:write name="returnX" />" /> + <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" /> + </logic:present> + <input tabindex="20" type="submit" value="Clear" /> + </div> + </form> + + </logic:present> + + <div class="list"> + + <h2> + +Choose from a list: + + </h2> + + <logic:present name="sites" scope="request"> + <logic:notPresent name="siteLists" scope="request"> + + <form method="get" action="<bean:write name="requestURL" />"> + <div> + <logic:notPresent name="entityID" scope="request"> + <input type="hidden" name="shire" value="<bean:write name="shire" />" /> + <input type="hidden" name="target" value="<bean:write name="target" />" /> + <input type="hidden" name="providerId" value="<bean:write name="providerId" />" /> + <logic:present name="time" scope="request"> + <input type="hidden" name="time" value="<bean:write name="time" />" /> + </logic:present> + </logic:notPresent> + <logic:present name="entityID" scope="request"> + <input type="hidden" name="entityID" value="<bean:write name="entityID" />" /> + <input type="hidden" name="returnX" value="<bean:write name="returnX" />" /> + <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" /> + </logic:present> + <input type="hidden" name="action" value="selection" /> + <select name="origin" tabindex="40"> + <logic:iterate id="site" name="sites"> + <option value="<jsp:getProperty name="site" property="name" />"> + <jsp:getProperty name="site" property="displayName" /> + </option> + </logic:iterate> + </select> + <input type="submit" value="Select" tabindex="50" /> + <select name="cache" tabindex="60"> + <option value="false"> Do not remember</option> + <option value="session" selected="selected"> Remember for session</option> + <option value="perm"> Remember for a week</option> + </select> + </div> + </form> + </logic:notPresent> + </logic:present> + +<logic:present name="showComments" scope="Request"> + +<!-- PROGRAMMING NOTE + Build two tables side by side, one with the Federation names and 'ALL' (if apposite) + and the other will be dynamically populated with the members of that federation. + + This needs to work in the face of no javascript, so we initially populate the + Right hand list with all the IdPs. The first Selection in the Left hand Table will + shrink this list + + The 'lists of all IdPs' is derived from the one which java gives us (if it did) + otherwise it is derived by a double iteration through the List of Lists. This + makes for complicated looking code, but it's dead simple really. + + --> + +</logic:present> + + <logic:present name="siteLists" scope="request"> + <form method="get" action="<bean:write name="requestURL" />"> + <div> + <logic:notPresent name="entityID" scope="request"> + <input type="hidden" name="shire" value="<bean:write name="shire" />" /> + <input type="hidden" name="target" value="<bean:write name="target" />" /> + <input type="hidden" name="providerId" value="<bean:write name="providerId" />" /> + <logic:present name="time" scope="request"> + <input type="hidden" name="time" value="<bean:write name="time" />" /> + </logic:present> + </logic:notPresent> + <logic:present name="entityID" scope="request"> + <input type="hidden" name="entityID" value="<bean:write name="entityID" />" /> + <input type="hidden" name="returnX" value="<bean:write name="returnX" />" /> + <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" /> + </logic:present> + <table id="tab"> + <tr> + <th>Federation </th> + <th>Institution</th> + </tr> + <tr><td> + <select name="FedSelector" size="10" id="FedSelect" tabindex="30" + onchange="changedFed(this.form.origin, + this.form.FedSelector[this.form.FedSelector.selectedIndex].value);"> + <logic:iterate id="siteset" name="siteLists"> + <logic:present name="singleSiteList" scope="request"> + + <!-- Only One site so select it --> + + <option value="<jsp:getProperty name="siteset" property="name"/>" selected="selected"> + <jsp:getProperty name="siteset" property="name"/> + </option> + </logic:present> + <logic:notPresent name="singleSiteList" scope="request"> + <option value="<jsp:getProperty name="siteset" property="name"/>"> + <jsp:getProperty name="siteset" property="name"/> + </option> + </logic:notPresent> + </logic:iterate> + <logic:notPresent name="singleSiteList" scope="request"> + + <!-- More than one site so select the 'All' --> + + <option value="ALL" selected="selected"> + All Sites + </option> + </logic:notPresent> + </select></td><td> + <input type="hidden" name="action" value="selection" /> + <select name="origin" size="10" id="originIdp" tabindex="40"> + <logic:present name="sites" scope="request"> + <logic:iterate id="site" name="sites"> + <option value="<jsp:getProperty name="site" property="name" />"> + <jsp:getProperty name="site" property="displayName" /> + </option> + </logic:iterate> + </logic:present> + + <logic:notPresent name="sites" scope="request"> + <logic:iterate id="siteset" name="siteLists"> + <logic:iterate id="site" name="siteset" property="sites"> + <option value="<jsp:getProperty name="site" property="name" />"> + <jsp:getProperty name="site" property="displayName" /> + </option> + </logic:iterate> + </logic:iterate> + </logic:notPresent> + </select> + </td></tr> + </table> + <p> + <input type="submit" value="Select" tabindex="50" /> + <select name="cache" tabindex="60" > + <option value="false"> Do not remember</option> + <option value="session" selected="selected"> Remember for session</option> + <option value="perm"> Remember for a week</option> + </select> + </p> + </div> + </form> + </logic:present> + </div> + <div class="search"> + <span class="option">or</span> + + <h2> + +Search by keyword: + + </h2> + + <form method="get" action="<bean:write name="requestURL" />"> + <div> + <p> + + <logic:notPresent name="entityID" scope="request"> + <input type="hidden" name="shire" value="<bean:write name="shire" />" /> + <input type="hidden" name="target" value="<bean:write name="target" />" /> + <input type="hidden" name="providerId" value="<bean:write name="providerId" />" /> + <logic:present name="time" scope="request"> + <input type="hidden" name="time" value="<bean:write name="time" />" /> + </logic:present> + </logic:notPresent> + <logic:present name="entityID" scope="request"> + <input type="hidden" name="entityID" value="<bean:write name="entityID" />" /> + <input type="hidden" name="returnX" value="<bean:write name="returnX" />" /> + <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" /> + </logic:present> + + <input type="hidden" name="action" value="search" /> + <input type="text" name="string" tabindex="70" /> + <input type="submit" value="Search" tabindex="80" /> + </p> + </div> + </form> + + <logic:present name="searchResultsEmpty" scope="request"> + <p class="error"> + +No provider was found that matches your search criteria, please try again. + + </p> + </logic:present> + + <logic:present name="searchresults" scope="request"> + <h3> + +Search results: + + </h3> + <form method="get" action="<bean:write name="requestURL" />"> + <div> + <ul> + <logic:iterate id="currResult" name="searchresults"> + <li> + <input type="radio" name="origin" tabindex="90" value="<jsp:getProperty name="currResult" property="name" />" /> + <jsp:getProperty name="currResult" property="displayName" /> + </li> + </logic:iterate> + </ul> + <p> + <logic:notPresent name="entityID" scope="request"> + <input type="hidden" name="shire" value="<bean:write name="shire" />" /> + <input type="hidden" name="target" value="<bean:write name="target" />" /> + <input type="hidden" name="providerId" value="<bean:write name="providerId" />" /> + <logic:present name="time" scope="request"> + <input type="hidden" name="time" value="<bean:write name="time" />" /> + </logic:present> + </logic:notPresent> + <logic:present name="entityID" scope="request"> + <input type="hidden" name="entityID" value="<bean:write name="entityID" />" /> + <input type="hidden" name="returnX" value="<bean:write name="returnX" />" /> + <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" /> + </logic:present> + <input type="hidden" name="action" value="selection" /> + <input type="submit" value="Select" tabindex="100" /> + <select name="cache" tabindex="100" > + <option value="false"> Do not remember</option> + <option value="session" selected="selected"> Remember for session</option> + <option value="perm"> Remember for a week</option> + </select> + </p> + </div> + </form> + </logic:present> + </div> + </div> + + <div class="footer"> + <p class="text"> +<!--CONFIG--> +Need assistance? Send mail to <a tabindex="120" href="mailto:user@domain">administrator's name</a> with description. + </p> + <div class="logo"><img src="images/internet2.gif" alt="Internet2" /></div> + </div> + +<logic:present name="showComments" scope="Request"> + +<!--PROGRAMMING NOTE + + We need to program the on changed selector. Note that option.InnterText only + works on IE, options.remove doesn't work on Firefox, and that + options.add doesn't work on Safari. Hence the somewhat strange manipulations + to delete & populate the list of options. + + X is the select object for the right hand table + Selected is the name selected in the left hand table + +--> + +</logic:present> + +<logic:present name="siteLists" scope="request"> +<script language="javascript" type="text/javascript"> +<!-- + +function changedFed(X, Selected) { + + <logic:notPresent name="singleSiteList" scope="request"> + + while (X.length > 0) { + X.options[(X.length-1)] = null; + } + + + <logic:iterate id="siteset" name="siteLists"> + if (Selected == "<jsp:getProperty name="siteset" property="name"/>") { + var opt; + <logic:iterate id="site" name="siteset" property="sites"> + opt = new Option ("<jsp:getProperty name="site" property="displayName" />"); + X.options[X.length] = opt; + opt.value = "<jsp:getProperty name="site" property="name" />"; + </logic:iterate> + } + </logic:iterate> + + if (Selected == "ALL") { + var opt; + + <logic:present name="sites" scope="request"> + <logic:iterate id="site" name="sites"> + opt = new Option("<jsp:getProperty name="site" property="displayName" />"); + X.options[X.length] = opt; + opt.value = "<jsp:getProperty name="site" property="name" />"; + </logic:iterate> + </logic:present> + + <logic:notPresent name="sites" scope="request"> + <logic:iterate id="siteset" name="siteLists"> + <logic:iterate id="site" name="siteset" property="sites"> + opt = new Option ("<jsp:getProperty name="site" property="displayName" />"); + X.options[X.length] = opt; + opt.value = "<jsp:getProperty name="site" property="name" />"; + </logic:iterate> + </logic:iterate> + </logic:notPresent> + } + + </logic:notPresent> + +} +--> +</script> +</logic:present> + + +</body> +</html> +
\ No newline at end of file diff --git a/src/main/webapp/wayferror.jsp b/src/main/webapp/wayferror.jsp new file mode 100644 index 0000000..a0cb29d --- /dev/null +++ b/src/main/webapp/wayferror.jsp @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "DTD/xhtml1-strict.dtd"> + <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> + <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> + + <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/> + <jsp:useBean id="errorText" scope="request" class="java.lang.String"/> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <link rel="stylesheet" type="text/css" href="main.css" /> + <title>Access System Failure</title> +</head> + +<body> +<div class="head"> +<img src="images/logo.jpg" alt="Logo" /> +<h1>Inter-institutional Access System Failure</h1> +</div> + +<p>The inter-institutional access system experienced a technical failure.</p> + +<p>Please email <a href="mailto:user@domain"> administrator's name</a> and include the following error message:</p> + +<logic:notEmpty name="requestURL"> +<p class="error">WAYF failure at (<bean:write name="requestURL" />)</p> + +<p><bean:write name="errorText" /></p> +</logic:notEmpty> +<logic:empty name="requestURL"> +<p class="error">The DiscoveryService should not be called directly</p> +</logic:empty> + + +</body> +</html>
\ No newline at end of file |